flask sqlalchemy 的一对多关系怎么添加数据?

2016-08-04 11:04:34 +08:00
 Jolly23

flask sqlalchemy 的一对多关系怎么添加数据?

举例:

主-用户,唯一

class UserInfo(db.Model):

__tablename__ = 'user_info'

id = db.Column(db.Integer, primary_key=True)

u_id = db.Column(db.String(80), unique=True)

u_account = db.relationship('Account', backref='user_info', lazy='dynamic')

用户账户信息,多个系统,一个用户存多个账户

class Account(db.Model):

__tablename__ = 'account'

id = db.Column(db.Integer, primary_key=True)

a_info_id = db.Column(db.Integer, db.ForeignKey('user_info.id'))

a_type = db.Column(db.Integer)	# 各系统编号

a_account = db.Column(db.String(256))

a_password = db.Column(db.String(256))

然后代码里怎么添加用户的账户信息,假设用户已存在:

current_user = UserInfo.query.filter_by(u_id=id).first()

为 current_user 添加账户信息:

new_account = Account(

        a_type=1,

        a_account=username,

        a_password=password,

    )

请问怎么添加 new_account 能使得此账户信息属于 current_user ?

我尝试过:

new_account.user_info.append(current_user)

db.session.add(new_account)

db.session.commit()

但是错了,这应该是多对多的添加方式,一对多该怎么写呢?

3016 次点击
所在节点    问与答
1 条回复
Jolly23
2016-08-04 11:37:50 +08:00
问题已经解决了,由于 Account.a_info_id 的外键是 UserInfo.id ,所以直接给 new_account 加上
new_account = Account(

a_type=1,

a_account=username,

a_password=password,

a_info_id=current_user.id

)

然后执行

db.session.add(new_account)

db.session.commit()

就好了

不太清楚这样解决问题是否最优,如果有更好的办法,也请大家提出交流,感谢 V2EX

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/297031

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX