Python SQLAlchemy:动态加载对另一个模块的反向引用
假设我在一个模块中有一个用户模型Python SQLAlchemy:动态加载对另一个模块的反向引用,python,sqlalchemy,Python,Sqlalchemy,假设我在一个模块中有一个用户模型 class User(Model): id = Column(Integer, primary_key=True) 然后,我想从另一个模块中的Post模型向用户添加一个动态加载的多对一关系。另外,我不想用其他模块的关系“污染”用户的模型定义 除了像这样从Post模型外部向用户类添加字段之外,还有更干净的方法吗 class Post(Model): user_id = Column(Integer, ForeignKey('user.id'))
class User(Model):
id = Column(Integer, primary_key=True)
然后,我想从另一个模块中的Post模型向用户添加一个动态加载的多对一关系。另外,我不想用其他模块的关系“污染”用户的模型定义
除了像这样从Post模型外部向用户类添加字段之外,还有更干净的方法吗
class Post(Model):
user_id = Column(Integer, ForeignKey('user.id'))
User.posts = relationship('Post', backref='user', lazy='dynamic')
谢谢好的,您可以在Post模型中定义它(见下文)
哦,发生了一些奇怪的事情。。。我第一次尝试了与此非常类似的东西,但backref的表述方式略有不同,如“relationship('User',backref='posts',lazy='dynamic')”。如果我这样做,我会得到一个错误(关于关系(无论什么),“dynamic”Loader不能用于多对一/一对一关系和/或uselist=False。但是,如果我按照您的方式进行,它工作得很好。我想知道这是一个bug还是这两种方法之间存在差异?有一个巨大的差异:在一种情况下,lazy应用于关系的一方,而在另一种情况下,lazy应用于关系的另一方.
class Post(Model):
user_id = Column(Integer, ForeignKey('user.id'))
user = relationship('User', backref=backref('posts', lazy='dynamic'))