[英]Flask-SQLAlchemy: How to delete row from many-to-many secondary table with the user id
[英]Empty user id for many value in child table
我在 sqlalchemy 中遇到問題。 我有一對多的關系:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(255))
tags = relationship('Tag', back_populates='users')
class Tag(Base):
__tablename__ = 'tags'
id = Column(Integer, primary_key=True)
tag_name = Column(String(50))
user_id = Column(Integer, ForeignKey('users.id'))
users = relationship('User', back_populates='tags')
當我以這種方式保存標簽時
user = session.query(User).filter(User.id == user_id).first()
user.tags = [Tag(tag_name=tag_name)]
session.add(user)
session.commit()
所有標簽都保存了,但是當我打開我的數據庫時,我看到只有最后一個標簽具有用戶 ID 值,而其他標簽則為空。 但測試必須有 user_id =1。 我該如何解決這個問題? 對於框架,我使用 sanic,db 是 posgresql。 我想為 id =1 的用戶保存許多標簽,例如:[user_id=1, tag='tad1'], [user_id=1, tag='tad2'] 和 [user_id=1, tag='tad3']。 結果我有可能的用戶,但每個用戶都有自己的多個標簽。
很難說,因為您沒有顯示添加多個標簽的完整上下文,但是如果您使用的是這樣的東西:
def add_tag(user_id,tag_name):
user = session.query(User).filter(User.id == user_id).first()
user.tags = [Tag(tag_name=tag_name)]
session.add(user)
session.commit()
然后像這樣執行它:
for tag in tags:
add_tag(user_id=user.id,tag_name=tag.name)
然后因為您使用 user.tags = [Tag(tag_name=tag_name)],您將覆蓋所有以前的標簽而不是附加到它們。 這可以解釋為什么只有最后一個標簽似乎與用戶相關聯。 對於 append 新標簽而不是覆蓋你應該像這樣使用 append() :
def add_tag(user_id,tag_name):
user = session.query(User).filter(User.id == user_id).first()
user.tags.append(Tag(tag_name=tag_name))
session.add(user)
session.commit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.