kak*_*u21 2 python flask flask-sqlalchemy
当我使用sqlacodegen创建models.py我无法使用时User.query
,收到警告"[AttributeError:type object'User '没有属性'query']".我认为db.query是一个非常有用的属性,它在SQLAlchemy()中使用:
db = SQLAlchemy()
Run Code Online (Sandbox Code Playgroud)
但我需要使用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))
Run Code Online (Sandbox Code Playgroud)
现在我导入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()
...
Run Code Online (Sandbox Code Playgroud)
当我运行时,给出的警告是:
AttributeError: type object 'User' has no attribute 'query'
Run Code Online (Sandbox Code Playgroud)
我想知道如何将[类User(Base)]转换为[class User(db.Model)]类型,以便它可以使用.query属性?或者是否有一些其他可用的方法来做[类User(Base)]类型?
听起来你已经习惯了使用Flask-SQLAlchemy,其中包含允许你提到的功能的秘诀.
SQLAlchemy上的Flask Docs指出了如何获得相同的功能:
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()
Run Code Online (Sandbox Code Playgroud)
它将实现User.query....
您期望的速记.重要的是最后一行.您也可以使用db.Model
Flask-SQLAlchemy中的类而不是'纯'SQLAlchemy Base
类.
归档时间: |
|
查看次数: |
1391 次 |
最近记录: |