我使用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。
答案 0 :(得分:1)
对于这种特殊情况,您可以使用get
按主键获取一行:
u = User.get(1)
u.id, u.name, u.email
您的代码的问题在于您尝试使用绑定方法,更糟糕的是,构造函数(在其中分配给self
什么都不做)来获取现有的,完全不同的实例。< / p>
我将展示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)