[英]Adding data to related table with SQLAlchemy
I have this to SQLAlchemy(using the Flask SqlAlchemy) objects defined: 我有这个SQLAlchemy(使用Flask SqlAlchemy)对象定义:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True)
password = db.Column(db.String(30))
email = db.Column(db.String(45), unique=True)
friends = db.relationship('Friend', backref='user',
lazy='dynamic')
def __init__(self, username, password, email):
self.username = username
self.password = password
self.email = email
def __repr__(self):
return "<User('%s','%s','%s')>" % (self.username, self.email, self.id)
class Friend(db.Model):
id = db.Column(db.Integer, primary_key=True)
userId = db.Column(db.Integer, db.ForeignKey('user.id'))
friendId = db.Column(db.Integer)
created = db.Column(db.DateTime)
def __init__(self, userId, friendId):
self.userId = userId
self.friendId = friendId
self.created = datetime.datetime.now()
def __repr__(self):
return "<Friend(%i,%i)>" % (self.userId, self.friendId)
As I understand to add a friend I should be able to do something like this: 据我所知添加一个朋友,我应该可以做这样的事情:
First getting the user: 首先得到用户:
MyUser = bpdata.User.query.filter_by(id=1).first()
Getting the friend: 得到这位朋友:
MyFriend = bpdata.User.query.filter_by(id=2).first()
Now I would like to do: 现在我想做:
MyUser.Friends.Append(MyFriend)
Is this possible or do I just have to add the friend IDs directly into the table Friend? 这是可能的还是我只需要将朋友ID直接添加到朋友表中?
Figured this one out my self.. 想出这个我的自我..
What I needed to do was: 我需要做的是:
MyUser.friends.append(Friend(MyUser.id, MyFriend.id))
and then commit the update. 然后提交更新。
Update: 更新:
Ok I found the proper way of doing what I wanted. 好的,我找到了做我想要的正确方法。 First I don't need the Friend table/class at all.
首先,我根本不需要朋友表/班级。 Full code:
完整代码:
association_table = db.Table('association',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('user.id'))
)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True)
password = db.Column(db.String(30))
email = db.Column(db.String(45), unique=True)
friends = db.relationship("User",
secondary=association_table,
backref='added_by',
primaryjoin=id == association_table.c.user_id,
secondaryjoin=id == association_table.c.friend_id)
With this I can now do following: 有了这个我现在可以做以下事情:
>>> user1 = User.query.filter_by(id=1).first()
>>> user1.friends
[]
>>> user2 = User.query.filter_by(id=2).first()
>>> user1.friends.append(user2)
>>> user1.friends
[<User('user1','user1@admin.com','2')>]
>>> user1.friends[0].added_by
[<User('admin','admin@admin.com','1')>]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.