python - 创建 SQLAlchemy 模型实例引发 "TypeError: __init__() takes exactly 1 argument"

标签 python flask sqlalchemy flask-sqlalchemy

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

相关文章:

python - 如何将动态生成的 zip 文件发送到客户端

python - Flask-用户注册 : add one more mail id

python - 我离开 Python 学习是因为 Python 2 vs 3

python - 等待值然后停止服务器,在 'werkzeug.server.shutdown' 被弃用并删除之后

python - 如何在pygame中启用中文输入?

python - SQLAlchemy - 一次搜索三个表

python - SQLAlchemy - 如何在父级已经持久化时插入连接表继承类实例

python - 如何在从 Pydantic 的 BaseModel 创建的模型中访问 FastAPI 的请求对象和依赖项

python - 神经网络生成不正确的结果,这些结果大约是输出的平均值

python - Odoo 8 通过自定义模块添加笔记本选项卡给出 'KeyError:'