我正在使用flask和SQLachemy学习python的后端开发。我已经了解了建立一对一,一对多和多对多关系的方式。现在,我正在尝试建立一种更加棘手的关系。
有3个模型类,它们具有以下关系:
现在我想在C和A之间建立一个通过B关系的关系(抽象问题提法,继续阅读具体提法)
文档中提到了join
,这也许是实现此目的的一种方法,但是我无法理解该示例
https://docs.sqlalchemy.org/en/13/orm/join_conditions.html#composite-secondary-joins
from backend import db # db = SQLAlchemy(app)
class User(db.Model): # class A
__tablename__ = 'User'
id = db.Column(db.Integer, primary_key=True)
# ...
albums = db.relationship('Album', backref='auteur')
# pictures taken as a photograph (pictures_posted may exist, but
# that's still the same difficulty than with photographer, "circular"
# relationships
pictures_taken = db.relationship('Picture', backref='photographe')
class Picture(db.Model): # class B
__tablename__ = 'Picture'
id = db.Column(db.Integer, primary_key=True)
# ...
album_id = db.Column(db.Integer, db.ForeignKey('Album.id'))
photographe_id = db.Column(db.Integer, db.ForeignKey('User.id'))
class Album(db.Model): # class C
__tablename__ = 'Album'
id = db.Column(db.Integer, primary_key=True)
# ...
pictures = db.relationship('Picture', backref='album')
auteur_id = db.Column(db.Integer, db.ForeignKey('User.id'))
为了不那么抽象,我想直接从photographes
的实例访问album
中表示的所有album
人。因为我可以访问auteur
和pictures
。
PS:我应该使用多态性来解决此问题(用户的子类:Lambda;照片;作者)吗?
答案 0 :(得分:0)
如果要反向访问(从相册到作者的所有图像):
album = Album.query.filter_by(id=111).first()
然后:
images = album.auteur.images
答案 1 :(得分:0)
实际上,最方便的答案是使用Album类中的属性。
if(message.content.indexOf("longtail") >= 0){
message.react(message.guild.emojis.get('549871163468152832'))
}
我在git上分享了我的整个后端,这可能很有用!