2016-09-22 9 views
1

Flask-SQLAlchemyでモデルを定義し、Flaskビューにその行を挿入したいとします。インスタンスを作成しようとすると、TypeError: __init__() takes exactly 1 argument (5 given)になります。私は問題がコンストラクタと関係していると思うが、docsは何が必要なのかを実際に説明していない。データを渡しながらモデルのインスタンスを作成するにはどうすればよいですか?SQLAlchemyモデルのインスタンスを作成すると、 "TypeError:__init __()は1つの引数をとります"

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() 

答えて

2

SQLAlchemyのは、キーワード引数を取り、インスタンスに割り当てデフォルトコンストラクタを提供します。

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

これは通常、あなたが必要とするすべてである、とあなたは、フォーム(限り、フィールド名が一致して)から取得したデータをアンパックするような用途に便利です。

キーワードを渡したくない場合は、__init__を上書きして、任意の順序で任意の引数を取ることができます。例えば、Updateは常にtrackingnumberを必要とし、あなたが最初の位置引数として渡したい場合:

class Update(db.Model): 
    ... 

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

これは、いくつかの状況において有用であることができるが、一般的に、あなただけのキーワード引数を渡すのデフォルトを堅持すべきです。

関連する問題