【发布时间】:2014-02-26 21:22:38
【问题描述】:
我正在尝试创建一个多对多关系表,其中包含更多信息,而不仅仅是两个 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
这是我的桌子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 来做。
谢谢。
EDIT1
使用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除了增加tablename
外没有变化但现在我明白了
sqlalchemy.exc.ArgumentError: Mapper Mapper|Relationship|relatioship could not assemble any primary key columns for mapped table 'Relationship'
【问题讨论】:
-
您显示的代码不应该给您所描述的错误。仔细检查你的拼写和括号;确保每个 表至少定义一个
primary_key列。此外,像reload(myModels)这样的技巧通常不适用于 sqlalchemy.ext.declarative;重新启动您的应用程序。 -
是的,它们都有一个 primary_key 列。我试图重新加载应用程序,但出现此错误,它甚至无法启动。
标签: python sqlalchemy flask flask-sqlalchemy