【问题标题】:How to create classes from existing tables using Flask-SQLaclhemy如何使用 Flask-SQLalchemy 从现有表创建类
【发布时间】:2019-10-31 02:14:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    好吧,您可以使用 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 文件中。我希望这会有所帮助

    【讨论】:

    • 感谢有关 sqlautocode 的提示。作为更新,sqlautocode 现在被 sqlacodegen 取代,它支持 SQLAlchemy 0.6 - 1.0 并且兼容 Python3。
    • 这是sqlacodegen的工作链接。
    【解决方案2】:

    您可以使用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())
    

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2016-01-14
      相关资源
      最近更新 更多