我有一个SQLAlchemy设置,其中我的一个模型没有存储在数据库中。数据来自Web服务,而其他模型只存储一个主键来引用它。
如何在仍使用SQLAlchemy关系的同时完成此工作?我现在正在数据库中本地缓存数据,并在发生更改时从Web服务进行更新,但这意味着我正在存储数据的冗余副本。我想不要在当地存储。考虑一下:
Base = declarative_base()
# Web service-backed model
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
username = Column(Unicode(20), nullable=False)
@classmethod
def get(cls, id):
"""Get an instance using data from the web service."""
pass
# Local model
class Document(Base):
__tablename__ = 'document'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('user.id'))
user = relationship(User, backref='documents')
content = Column(UnicodeText)
我想从我的数据库中删除User模型并仅从Web服务中检索它(这很简单),同时仍然保留了SQLAlchemy(Document.user
提供的双向关系的好处。和User.documents
)。
我如何实现后者?
答案 0 :(得分:1)
load_on_pending
关系标志(http://docs.sqlalchemy.org /en/rel_0_7/orm/relationships.html#relationships-api)这将允许你创建一个User对象,给它你想要的主键,添加()它到一个Session然后没有任何刷新{{1}集合应该发出一个负载;在0.8中有更好的解决方案enable_relationship_loading(http://docs.sqlalchemy.org/en/latest/orm/session.html#sqlalchemy.orm.session.Session.enable_relationship_loading)方法,如果使用此方法附加User对象,对象将保持与会话分离,但在调用user.documents时仍然使用它。
这些都是我为了一个用户的利益而添加的粗略功能,不一定适合你在这里做的事情,但是如果你试一试,请告诉我它是怎么回事。