簡體   English   中英

子表中許多值的空用戶 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM