如何在 sqlacodegen 模型中使用 .query 属性
how to use .query attribute in sqlacodegen models
当我使用 sqlacodegen 创建 models.py 时,我无法使用 User.query
,收到警告“[AttributeError: type object 'User' has no attribute 'query'] ”。
我认为 db.query 是一个非常有用的属性,它在 SQLAlchemy():
中使用
db = SQLAlchemy()
但我需要使用 sqlacodegen 为我们系统中现有的 table 创建模型。创建代码如下:
models.py
# coding: utf-8
from sqlalchemy import Column, Date, Float, Integer, String, Table, text
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class User(Base):
__tablename__ = u'users'
id = Column(Integer, primary_key=True)
email = Column(String(64))
username = Column(String(64))
role_id = Column(Integer)
password_hash = Column(String(128))
现在我导入 models.py:
from models import *
@main.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.name.data).first()
...
当我运行这个的时候,给出的警告是:
AttributeError: type object 'User' has no attribute 'query'
我想知道如何将 [class User(Base)] 转换为 [class User(db.Model)] 这样的类型,以便它可以使用 .query 属性?或者是否有其他一些可用的方法可以使用 [class User(Base) ]type?
听起来您似乎习惯于使用 Flask-SQLAlchemy,它包含实现您提到的功能的秘诀。
Flask Docs on SQLAlchemy 表示如何获得相同的功能:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
它将启用您期望的 User.query....
的 shorthand。重要的是最后一行。您也可以使用 Flask-SQLAlchemy 中的 db.Model
class 而不是 'pure' SQLAlchemy Base
class.
当我使用 sqlacodegen 创建 models.py 时,我无法使用 User.query
,收到警告“[AttributeError: type object 'User' has no attribute 'query'] ”。
我认为 db.query 是一个非常有用的属性,它在 SQLAlchemy():
db = SQLAlchemy()
但我需要使用 sqlacodegen 为我们系统中现有的 table 创建模型。创建代码如下:
models.py
# coding: utf-8
from sqlalchemy import Column, Date, Float, Integer, String, Table, text
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class User(Base):
__tablename__ = u'users'
id = Column(Integer, primary_key=True)
email = Column(String(64))
username = Column(String(64))
role_id = Column(Integer)
password_hash = Column(String(128))
现在我导入 models.py:
from models import *
@main.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.name.data).first()
...
当我运行这个的时候,给出的警告是:
AttributeError: type object 'User' has no attribute 'query'
我想知道如何将 [class User(Base)] 转换为 [class User(db.Model)] 这样的类型,以便它可以使用 .query 属性?或者是否有其他一些可用的方法可以使用 [class User(Base) ]type?
听起来您似乎习惯于使用 Flask-SQLAlchemy,它包含实现您提到的功能的秘诀。
Flask Docs on SQLAlchemy 表示如何获得相同的功能:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
它将启用您期望的 User.query....
的 shorthand。重要的是最后一行。您也可以使用 Flask-SQLAlchemy 中的 db.Model
class 而不是 'pure' SQLAlchemy Base
class.