我已经使用Flask-SQLAlchemy定义了一个模型,并希望在Flask视图中插入一行。当我尝试创建实例时,我得到TypeError: __init__() takes exactly 1 argument (5 given)
。我认为这个问题与构造函数有关,但docs并没有真正解释所需要的内容。如何在向其传递数据时创建模型实例?
class Update(db.Model):
id = db.Column(db.Integer, primary_key=True)
tracking_number = db.Column(db.Integer)
date = db.Column(db.DateTime)
status = db.Column(db.String(80))
location = db.Column(db.String(80))
@app.route('/put_update')
def put_update():
update = Update('trackingid', '2016-08-30 22:48:00', 'status', 'location')
db.session.add(update)
db.session.commit()
答案 0 :(得分:3)
SQLAlchemy提供了一个默认构造函数,它接受关键字参数并将它们分配给实例。
Update(trackingnumber='trackingid', ...)
这通常是您所需要的,并且方便用于解压缩从表单获取的数据(只要字段名称匹配)。
如果您不想传递关键字,可以覆盖__init__
以您想要的任何顺序获取任何参数。例如,如果Update
始终需要trackingnumber
,并且您希望将其作为第一个位置参数传递:
class Update(db.Model):
...
def __init__(self, trackingnumber, **kwargs):
self.trackingnumber = trackingnumber
super().__init__(**kwargs)
这在某些情况下很有用,但通常你应该坚持传递关键字参数的默认值。