我已经使用postgres数据库和sqlalchemy设置了一个烧瓶应用程序。不幸的是,这不是烧瓶-方炼金术的扩展。虽然我能够让应用程序与普通sqlalchemy一起工作,但扩展似乎不喜欢我们设置的模式。我希望利用扩展所具有的一些特性,比如分页。
这是我的问题..。
我有一个postgres URL,我可以用烧瓶-sqlalchemy扩展,但我不知道如何处理模型。我是否只是重新键入所有postgres作为每个表的模型?
现在我有几个模特看起来:
class Account(Base):
users = relationship("User")
class User(Base):
account = relationship("Account", backref="user")
这个很好用。有额外的列没有定义在模型中,但我能够访问(如名称,电子邮件等为用户模型)。我是否需要在模型中声明所有这些以使用烧瓶-sqlalchemy扩展?
谢谢你的帮助。
发布于 2014-05-21 08:26:34
我想出了解决办法。我的主要问题是,我想使用分页和其他由烧瓶-SQLAlchemy提供的方法。我初始化了我的数据库,非常类似于这声明部分。
所关注的问题是:
Base.query = db_session.query_property()
结果是,您可以为该构造函数提供另一个它将调用的实现。所以我进口了flask.ext.sqlalchemy.BaseQuery并给了它这个。
这一行现在看起来是:
Base.query = db_session.query_property(BaseQuery)
我能够使用我想要的所有烧瓶-sqlalchemy查询功能!如果其他人遇到这个问题,我会在这里发这篇文章。
发布于 2015-05-08 14:53:17
发布于 2014-05-21 06:53:45
尝试使用SQLACodeGen。只要将它指向您的数据库,它将为您生成所有SQLA模型,然后您可以根据需要对其进行调整--这是一个很大的时间节省。
如果您喜欢运行时的发现路由,SQLAlchemy也可以反映现有表格。
下面是一个使用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))
https://stackoverflow.com/questions/23766682
复制