上記のコードに問題はありません。実際、autoincrement=True
も必要ありません。 またはdb.Sequence('seq_reg_id', start=1, increment=1),
SQLAlchemyが最初のInteger
を自動的に設定するため autoincrement=True
としてFKとしてマークされていないPK列 。
ここでは、あなたに基づいた作業設定をまとめました。 SQLAlechemyのORMは、IDの生成と、それらを使用したオブジェクトの入力を処理します。宣言型ベースベースのクラスを使用する場合 オブジェクトのインスタンスを作成するために定義したもの。
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.debug = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:[email protected]/testdb'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
class Region(db.Model):
__tablename__ = 'regions'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
db.drop_all()
db.create_all()
region = Region(name='Over Yonder Thar')
app.logger.info(region.id) # currently None, before persistence
db.session.add(region)
db.session.commit()
app.logger.info(region.id) # gets assigned an id of 1 after being persisted
region2 = Region(name='Yet Another Up Yar')
db.session.add(region2)
db.session.commit()
app.logger.info(region2.id) # and 2
if __name__ == '__main__':
app.run(port=9001)