0
我有以下兩類(簡體):SQLAlchemy的許多一對多關聯類
class User(db.Model):
__tablename__ = "AppUser"
user_id = db.Column(db.Integer, primary_key=True)
class Task(db.Model):
__tablename__ = "Task"
task_id = db.Column(db.Integer, primary_key=True)
我想有許多-to-many關聯加入他們的行列,但存儲的附加列除了主鍵:
class Solved(db.Model):
__tablename__ = "Solved"
user_id = db.Column(db.Integer, db.ForeignKey("AppUser.user_id"), primary_key=True)
task_id = db.Column(db.Integer, db.ForeignKey("Task.task_id"), primary_key=True)
solved_at = db.Column(db.DateTime, default=datetime.utcnow)
我選擇了表上的類,因爲SQLAlchemy文檔建議使用一個類,如果我必須存儲其他列。
我的問題是我不能「加入」他們。 我試過如下:
直接添加引用關聯表:
task = db.relationship("Task", backref="users")
user = db.relationship("AppUser", backref="tasks")
添加引用到用戶和任務等級:
class User:
[...]
tasks = db.relationship("Solved", backref="users")
class Task:
[...]
users = db.relationship("Solved", backref="tasks")
他們既不工作。 如果我將Solved類更改爲db.Table對象,我感到驚訝。 我想嘗試關聯類,因爲我使用引用Solved但不接受db.Table對象的子查詢。
我想要做的是加入什麼 「解決」 任務列表:
u = User.query.get([...])
t = Task.query.get([...])
u.tasks.append(t)
db.session.add(u)
db.session.commit()
編輯:
當我檢查元素是否已經 「解決」:
# My models have name fields
u.tasks.filter_by(name="abc")
我收到以下錯誤:
AttributeError: '_AssociationList' object has no attribute 'filter_by'
當我追加一個新元素到列表:
u.tasks.append(t)
db.session.add(u) # These two steps work
db.session.commit() # Error
sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Original exception was: relationship 'user' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)
就像上面提到的,它用一個簡單的db.Table協會的工作,但不能與一個關聯類。
我也試過像here (SQLAlchemy docs)這樣的關聯代理,但是我得到了和上面相同的錯誤。
*什麼*確切地不起作用?代碼在你定義關係時失敗?或者一些具體的查詢?你能提供你所嘗試的代碼嗎? – van