首页 > 解决方案 > Flask SQLAlchemy,通过类构造函数添加数据库记录时,'__init__ 只需要一个参数'

问题描述

在我的 API 中,我经常使用这样的模式:

from app.models import Timecards

def add_timecard(payload):
    new_timecard = Timecards(**payload)
    db.session.add(new_timecard)
    db.session.commit()

在哪里Timecards

class Timecards(db.Model):
__tablename__ = "timesheet_line"

    id = db.Column("line_id", db.Integer, primary_key=True, autoincrement=True)
    description = db.Column("line_description", db.String(255))
    ref_number = db.Column("line_ref_number", db.String(255))
    notes = db.Column("line_notes", db.String(255))
    approved_by_id = db.Column("line_approved_by_id", db.String(255))
    date_approved = db.Column("line_date_approved", db.DateTime)
    date_submitted = db.Column("line_date_submitted", db.DateTime)
    time_started = db.Column("line_time_started", db.DateTime)
    time_ended = db.Column("line_time_ended", db.DateTime)
    user_id = db.Column("line_user_id", db.Integer)
    is_active = db.Column("line_isActive", db.Integer)

我没有__init__在此类上定义自定义方法。当我以这种方式与它们交互时,我的所有其他类都工作得很好,但由于某种原因,这个特定的类似乎只接受这个自动传递的self参数并拒绝我payload的错误

__init__() takes exactly 1 argument (2 given)

例如我有这个类:

class ServicesRendered(db.Model):
    __tablename__ = "services_rendered"

    id = db.Column("service_id", db.Integer, primary_key=True, autoincrement=True)
    notes = db.Column("service_notes", db.String(255))
    status = db.Column("service_status", db.String(255))
    time_open = db.Column("service_timeOpen", db.DateTime)
    time_close = db.Column("service_timeClose", db.DateTime)
    is_active = db.Column("service_isActive", db.Integer)

以下代码完美运行:

def add_services_rendered(payload):
    new_services_rendered = ServicesRendered(**payload)

据我所知,这些类是以相同的方式定义的,并且我以相同的方式与它们交互,但是一个会引发错误,而另一个不会。

标签: pythonflasksqlalchemyflask-sqlalchemy

解决方案


推荐阅读