【发布时间】:2019-10-31 02:14:57
【问题描述】:
我知道我需要在 SQLAlchemy 中使用 MetaData 对象,但我不确定如何将它与类一起使用,
db = SQLAlchemy(app)
meta =db.Metadata()
class orders(db.model):
pass
如何将元对象传递给类,以便它自动生成表模式?
【问题讨论】:
标签: python flask sqlalchemy flask-sqlalchemy
我知道我需要在 SQLAlchemy 中使用 MetaData 对象,但我不确定如何将它与类一起使用,
db = SQLAlchemy(app)
meta =db.Metadata()
class orders(db.model):
pass
如何将元对象传递给类,以便它自动生成表模式?
【问题讨论】:
标签: python flask sqlalchemy flask-sqlalchemy
好吧,您可以使用 SQLAlchemy 的自动加载功能,但我还没有弄清楚如何从 flask-sqlalchemy 中使用它。如果您想阅读它,这里有一个教程:SQLAlchemy Connecting to pre-existing databases。 我暂时找到的最佳解决方案是使用sqlautocode 从数据库中的现有表中生成 SQLAlchemy 模型。我知道如果 SQLAlchemy 能够自动处理它会更好,但我无法从 Flask 中找到一种方法。
使用方法如下:
sqlautocode mysql://<dbuser>:<pass>@localhost:3306/<dbname> -o alchemy_models.py
这将生成模型并将它们放在alchemy_models.py 文件中。我希望这会有所帮助
【讨论】:
您可以使用sqlacodegen 生成 sqlalchemy 所需的类。
pip install sqlacodegen
sqlacodegen postgresql+psycopg2://username:password@host/database --outfile models.py
我遇到了 Base 类和查询属性的问题。我收到的错误是:
AttributeError: type object 'PaymentType' has no attribute 'query'
我能够通过使用 scoped_session 使 sqlacodegen 类工作。
session = scoped_session(sessionmaker(autocommit=False,autoflush=False,bind=engine))
Base.query = session.query_property()
print(PaymentType.query.all())
【讨论】: