我想做一个多对多的关系表与更多的信息,而不仅仅是两个ID。它不起作用。我显然是用通用名称来标准化我的表格。但是用例可能像用户表一样,有一个帖子表和一个喜欢关系表,就像那样。当我做这些表,蟒蛇给我说:多对多烧瓶和sqlalchemy 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对象发布该值。类似于select和sum 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是除了加入标签的不变lename
,但现在我得到
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;重启你的应用程序 – SingleNegationElimination
是的,他们都有一个primary_key列。我试图重新加载应用程序,但有了这个错误,它甚至没有启动。 – Wonay