繁体   English   中英

flask-sqlalchemy,一对多关系,外键更改为NULL

[英]flask-sqlalchemy, one-many relationship, foreign key changes into NULL

我有用户表和专辑表等。和用户相册有一对多的关系。

但是,当用户与一个或多个相册关联时,从相册表中排除最新密钥的外键将变为null。 这是user_uid = 1有3个相册,user_uid = 2有1个相册的情况。(但是user_uid = 1的外键只是一个。而且这个问题在具有多对多关系的地方也会出现。这是我的代码。

class User(Base):
__tablename__ = 'user'

uid = Column(Integer, primary_key=True)
username = Column(String(10), unique=True, nullable=False)
email = Column(String(35), unique=True, nullable=False)
salted_password = Column(String(100), unique=True, nullable=False)
profile_pic = Column(String(100))
authorization = Column(Boolean)
expiry = Column(DATETIME)
fcm_token = Column(String(45))
created_at = Column(DATETIME)
albums = relationship('Album')
notifications = relationship('Notification')
like_photo = relationship('Photo', secondary=like_photo)
follow_album = relationship('Album', secondary=follow_album)
followed = relationship('User',
                           secondary=followers,
                           primaryjoin=(followers.c.follower_id == uid),
                           secondaryjoin=(followers.c.followed_id == uid),
                           backref=backref('followers', lazy='dynamic'),
                           lazy='dynamic')
comment_photo = relationship('Photo', secondary=comment)




class Album(Base):
__tablename__ = 'album'

aid = Column(Integer, primary_key=True)
title = Column(String(45), nullable=False)
created_at = Column(DATETIME)
user_uid = Column(Integer, ForeignKey('user.uid'))
photos = relationship('Photo')
album_tags = relationship('Album_tag')

而且我更新了专辑表,如下所示。

u = User.query.filter(User.uid == session['uid']).first()
u.albums = [Album(title=request.json['title'], created_at=datetime.utcnow())]               
db_session.add(u) 
db_session.commit()

我不知道为什么

我相信您需要采取另一种方法,因为这样会覆盖用户的相册列表:

coffee_album = Album(title=request.json['title'], \
                     created_at=datetime.utcnow())
u = User.query.filter(User.uid == session['uid']).first()
coffe_album.user_uid = u.uid
db_session.add(coffee_album) 
db_session.commit()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM