我使用postgres db和sqlalchemy设置了Flask应用程序。不幸的是,这不是flask-sqlalchemy扩展。虽然我能够让应用程序与常规sqlalchemy一起使用,但扩展程序似乎不喜欢我们设置的模式。我希望利用扩展程序喜欢分页的一些功能。
这是我的问题......
我有一个postgres URL,我可以使用flask-sqlalchemy扩展,但我不知道如何处理这些模型。我只是将所有postgres scheama重新输入作为每个表的模型吗?
现在我有几个模型看起来像:
class Account(Base):
users = relationship("User")
class User(Base):
account = relationship("Account", backref="user")
这很好用。还有其他列未在模型中定义,但我可以访问(例如用户模型的名称,电子邮件等)。我是否需要在模型中声明所有这些以使用flask-sqlalchemy扩展名?
感谢您的帮助。
答案 0 :(得分:3)
用于SQLAlchemy的sqlacodegen模型代码生成器的这种变体
给出烧瓶模型生成的选项“--flask”
答案 1 :(得分:2)
尝试使用SQLACodeGen。只需将它指向您的数据库,它就会为您生成所有SQLA模型,然后您可以根据需要调整它 - 它可以节省大量时间。
如果你喜欢运行时的发现路径,SQLAlchemy也可以reflect existing tables。
以下是使用SQLACodeGen的快速示例:
sqlacodegen postgresql:///example_database --tables car
输出:
# coding: utf-8
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class Car(Base):
__tablename__ = 'car'
id = Column(Integer, primary_key=True)
price = Column(Integer)
color_id = Column(ForeignKey('color.id'))
color = relationship(u'Color')
class Color(Base):
__tablename__ = 'color'
id = Column(Integer, primary_key=True)
name = Column(String(50))
答案 2 :(得分:1)
我找到了解决方案。我的主要问题是我想使用paginate和flask-SQLAlchemy给出的其他方法。我初始化我的数据库非常类似于this声明部分。
感兴趣的是:
Base.query = db_session.query_property()
事实证明,您可以为该构造函数提供另一个它将调用的实现。所以我导入了flask.ext.sqlalchemy.BaseQuery并给了它。
该行现在看起来像:
Base.query = db_session.query_property(BaseQuery)
我可以使用我想要的所有flask-sqlalchemy查询功能!如果其他人遇到问题,我会在此发布此内容。