创建SQLAlchemy模型实例引发" TypeError:__ init __()只取1个参数"

时间:2016-09-22 20:59:02

标签: python flask sqlalchemy flask-sqlalchemy

我已经使用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()

1 个答案:

答案 0 :(得分:3)

SQLAlchemy提供了一个默认构造函数,它接受关键字参数并将它们分配给实例。

Update(trackingnumber='trackingid', ...)

这通常是您所需要的,并且方便用于解压缩从表单获取的数据(只要字段名称匹配)。

如果您不想传递关键字,可以覆盖__init__以您想要的任何顺序获取任何参数。例如,如果Update始终需要trackingnumber,并且您希望将其作为第一个位置参数传递:

class Update(db.Model):
    ...

    def __init__(self, trackingnumber, **kwargs):
        self.trackingnumber = trackingnumber
        super().__init__(**kwargs)

这在某些情况下很有用,但通常你应该坚持传递关键字参数的默认值。