Flask-SQLAlchemy - TypeError: __init__() 只占 1 个位置

Ill*_*ich 5 python sqlalchemy flask flask-sqlalchemy

我只想用 Flask-sqlalchemy 创建和测试数据库。已成功创建数据库。我的代码:

class Entry(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    occurences = db.Column(db.String(80), unique=True)

a = Entry('run.py:27')
Run Code Online (Sandbox Code Playgroud)

错误:

    a = Entry('run.py:27')
TypeError: __init__() takes 1 positional argument but 2 were given
Run Code Online (Sandbox Code Playgroud)

如果我尝试在没有参数的情况下执行此操作,程序将返回:

qlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table:        entry [SQL: 'INSERT INTO entry (occurences) VALUES (?)'] [parameters: (None,)]
Run Code Online (Sandbox Code Playgroud)

错误开始于

db.session.commit()
Run Code Online (Sandbox Code Playgroud)

Ull*_*uri 7

根据他们的文档

SQLAlchemy 向所有模型类添加了一个隐式构造函数,它接受所有列和关系的关键字参数。如果您出于任何原因决定覆盖构造函数,请确保继续接受 **kwargs 并使用这些 **kwargs 调用超级构造函数以保留此行为...

这意味着您的代码失败,因为构造函数需要关键字参数。您可以通过以下方式修复它:

# instantiating Entry with the occurences keyword
a = Entry(occurences='run.py:27')
Run Code Online (Sandbox Code Playgroud)

或覆盖__init__... 在这种情况下,您还应该包括 a**kwargs和对 super 的调用。


ale*_*cxe 3

您必须定义__init__支持模型字段的方法:

class Entry(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    occurences = db.Column(db.String(80), unique=True)

    def __init__(self, occurences):
        self.occurences = occurences
Run Code Online (Sandbox Code Playgroud)