Non c'è niente di sbagliato nel codice sopra. In effetti, non hai nemmeno bisogno di autoincrement=True
o db.Sequence('seq_reg_id', start=1, increment=1),
poiché SQLAlchemy imposterà automaticamente il primo Integer
Colonna PK che non è contrassegnata come FK come autoincrement=True
.
Qui, ho messo insieme una configurazione di lavoro basata sulla tua. L'ORM di SQLAlechemy si occuperà della generazione degli ID e del popolamento degli oggetti con essi se si utilizza la classe basata su Declarative Base che hai definito per creare istanze del tuo oggetto.
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)