在Flask-SQLAlchemy中添加__init __()方法

时间:2018-07-11 13:59:58

标签: python python-3.x flask flask-sqlalchemy

我正在python 3.6.5中使用Flask-SQLAlchemy,到目前为止-尚未能够通过调用__init__()来扩展模型。我的代码如下:

'''
file: models.py
'''
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class Network(db.Model):
    __tablename__ = 'network'

    id = db.Column(db.Integer, primary_key=True)
    baud_rate = db.Column(db.Integer)

    def __init__(**kwargs):
        super(Network, self).__init__(**kwargs)  # see note

尝试实例化网络对象会导致错误:

>>> n = Network(baud_rate=300)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: __init__() takes 0 positional arguments but 1 was given

这有点令人惊讶,因为我正在使用the recipe given in the Flask-SQLAlchemy documentation

  

如果出于任何原因决定覆盖构造函数,请确保   继续接受** kwargs并使用它们调用超级构造函数   **要保留这种行为:    class Foo(db.Model): # ... def __init__(**kwargs): super(Foo, self).__init__(**kwargs) # do custom stuff

由于我使用的是python 3.6,所以我想也许应该将该调用升级到super(),如:

def __init__(**kwargs):
    super().__init__(**kwargs)

...但这没什么区别。

1 个答案:

答案 0 :(得分:4)

文档之类的声音忘了提及self中的__init__属性(5月接受了pull request):

class Network(db.Model):
    __tablename__ = 'network'

    id = db.Column(db.Integer, primary_key=True)
    baud_rate = db.Column(db.Integer)

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