SQLAlchemy:从数据库查询填充实例属性
我在使用SQLAlchemy,下面这个User
模型是用来跟踪我网站上的用户的。我想让__init__
方法在传入一个有效的用户id
后,自动填充类实例中的所有字段,但它没有按预期工作。
这是我的代码:
class User(db.Model):
# Fields
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32))
email = db.Column(db.String(255), index=True)
# Methods
def __init__(self, id):
# Populate the fields
u = User.query.filter_by(id=id).first()
# Fill in the name, email fields from the result
self = u # <-- Not working as expected
# ...
问题是这些属性没有被填充。
u = User(1)
u.id, u.name, u.email # <-- Output: None
我该如何从用户id
自动填充所有类属性,而不需要一个一个地设置呢?
注意:我已经把上面代码中的验证部分去掉了,以免显得杂乱
注意2:我还是SQLAlchemy的新手,最近才开始学习Python。1 个回答
1
在这个特定的情况下,你可以使用get
方法,它可以通过主键获取一行数据:
u = User.get(1)
u.id, u.name, u.email
你代码中的问题是你试图使用一个绑定的方法,更糟糕的是,你在使用构造函数(在这里给self
赋值根本没有任何作用)来获取一个完全不同的实例。
我会给你展示一个get
方法的重新实现,这样你就可以在其他情况下重复使用它。
class User(db.Model):
# ...
@classmethod
def get_by_id(cls, id):
return cls.query.filter_by(id=id).one()
u = User.get_by_id(1)