我已经使用 Flask-SQLAlchemy 定义了一个模型,并希望在 Flask View 中插入一行。当我尝试创建实例时,出现 TypeError: __init__() gets正好 1 个参数(给定 5 个)
。我认为问题与构造函数有关,但 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()
最佳答案
SQLAlchemy 提供了一个默认构造函数,它接受关键字参数并将它们分配给实例。
Update(trackingnumber='trackingid', ...)
这通常是您所需要的,并且对于解压缩从表单中获取的数据(只要字段名称匹配)等用途很方便。
如果您不想传递关键字,您可以重写 __init__
以按照您想要的顺序获取任何参数。例如,如果 Update
始终需要 trackingnumber
并且您希望将其作为第一个位置参数传递:
class Update(db.Model):
...
def __init__(self, trackingnumber, **kwargs):
self.trackingnumber = trackingnumber
super().__init__(**kwargs)
这在某些情况下可能很有用,但通常您应该坚持使用传递关键字参数的默认值。
关于python - 创建 SQLAlchemy 模型实例引发 "TypeError: __init__() takes exactly 1 argument",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39648772/