gpt4 book ai didi

python - python中flask和sqlalchemy的多对多

转载 作者:行者123 更新时间:2023-12-03 17:04:30 24 4
gpt4 key购买 nike

我正在尝试创建一个多对多关系表,其中包含更多信息,而不仅仅是两个 id。它不起作用。我显然用通用名称标准化了我的表格。但是用例可能就像一个用户表,有一个帖子表和一个喜欢关系表,类似的东西。当我做这些表时,python给了我:

sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Table2.rela1 - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.

所以这是我的关系表
class Relationship(db.Model):
id = db.Column(db.Integer, primary_key = True)
table1_id = db.Column(db.Integer, db.ForeignKey('Table1.id')),
table2_id = db.Column(db.Integer, db.ForeignKey('Table2.id')),
value = db.Column(db.Integer), #a number
date = db.Column(db.DateTime) #actual time of the entry

这是我的 table 1
class Table1(db.Model):
id = db.Column(db.Integer, primary_key = True)
rela1 = db.relationship('Relationship', backref = 'rel1', lazy = 'dynamic')
rela2 = db.relationship('Table2', backref = 'rel2', lazy = 'dynamic')

这是我的表 2
class Table2(db.Model):    
id = db.Column(db.Integer, primary_key = True)
table1_id = db.Column(db.Integer, db.ForeignKey('table1.id'))
rela1 = db.relationship('Relationship', backref = 'rel3', lazy = 'dynamic')

谢谢你帮助我。

如果这可以解决,那么我的第二个问题是创建一个函数来计算每个 Table2 对象的总“值”,而不管哪个 table1 对象发布值。类似于 sum 和 group by table2.id 的选择,但我真的不明白如何用 python、flask 和 sqlalchemy 来做。

谢谢。

编辑1

使用 http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#association-object

我改成
class Relationship(db.Model):
__tablename__ = 'relationship'
table1_id = db.Column(db.Integer, db.ForeignKey('Table1.id'), primary_key = True),
table2_id = db.Column(db.Integer, db.ForeignKey('Table2.id'), primary_key = True),
value = db.Column(db.Integer), #a number
date = db.Column(db.DateTime) #actual time of the entry
table2obj = db.relationship("Table2", backref="table2_assocs")

然后
class Table2(db.Model):
__tablename__ = 'table2'
id = db.Column(db.Integer, primary_key = True)
table1_id = db.Column(db.Integer, db.ForeignKey('table1.id'))

除了添加 之外,表1没有变化。表名

但现在我明白了
sqlalchemy.exc.ArgumentError: Mapper Mapper|Relationship|relatioship could not assemble any primary key columns for mapped table 'Relationship'

最佳答案

有两个relationship Table1 上的声明,但是从您发布的代码中,我只能看到一条到 Table2 的路径, 通过 Relationship.table2_id .

看起来您正在尝试与中间关系上的额外元数据建立多对多关系。这称为 association object pattern在 sqlalchemy 文档中。为此,您到目前为止所拥有的一切,除了 Table1.rela2很好,你很好。那个“流氓”relationship需要删除。

Table1 获得建立真正关系的便利至Table2 ,您需要使用 association proxy .

关于python - python中flask和sqlalchemy的多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com