如何使用Flask-SQLalchemy从现有表创建类

时间:2015-04-05 08:22:35

标签: python flask sqlalchemy flask-sqlalchemy

我知道我需要在SQLAlchemy中使用MetaData对象,但我不确定如何在类中使用它,

db = SQLAlchemy(app)
meta =db.Metadata()
class orders(db.model):
  pass

如何将元对象传递给类,以便它自动生成表模式?

2 个答案:

答案 0 :(得分:5)

那么你可以使用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文件中。我希望这有帮助

答案 1 :(得分:0)

您可以使用sqlacodegen生成sqlalchemy所需的类。

pip install sqlacodegen

sqlacodegen postgresql+psycopg2://username:password@host/database --outfile models.py

我遇到了基类和查询属性的问题。我收到的错误是:

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