Rien de mal avec le code ci-dessus. En fait, vous n'avez même pas besoin de autoincrement=True
ou db.Sequence('seq_reg_id', start=1, increment=1),
car SQLAlchemy définira automatiquement le premier Integer
Colonne PK qui n'est pas marquée comme FK comme autoincrement=True
.
Ici, j'ai mis en place une configuration de travail basée sur la vôtre. L'ORM de SQLAlechemy se chargera de générer des identifiants et de remplir les objets avec eux si vous utilisez la classe basée sur Declarative Base que vous avez défini pour créer des instances de votre objet.
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)