Python 如何在sqlacodegen模型中使用.query属性

Python 如何在sqlacodegen模型中使用.query属性,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,当我使用sqlacodegen创建models.py时,我不能使用User.query,因为会得到警告“[AttributeError:type object'User'没有属性'query']”。 我认为db.query是一个非常有用的属性,它在SQLAlchemy()中使用: 但我需要使用sqlacodegen为系统中的现有表创建模型。创建代码如下: models.py # coding: utf-8 from sqlalchemy import Column, Date, Float, I

当我使用sqlacodegen创建models.py时,我不能使用
User.query
,因为会得到警告“[AttributeError:type object'User'没有属性'query']”。 我认为db.query是一个非常有用的属性,它在SQLAlchemy()中使用:

但我需要使用sqlacodegen为系统中的现有表创建模型。创建代码如下:

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)]类型,是否有其他可用的方法可以做到这一点?

听起来您已经习惯于使用Flask 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….
速记。重要的一行是最后一行。您也可以使用Flask SQLAlchemy中的
db.Model
类,而不是'pure'SQLAlchemy
Base

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()