繁体   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