No hay nada malo con el código anterior. De hecho, ni siquiera necesita autoincrement=True
o db.Sequence('seq_reg_id', start=1, increment=1),
como SQLAlchemy establecerá automáticamente el primer Integer
Columna PK que no está marcada como FK como autoincrement=True
.
Aquí, he creado una configuración de trabajo basada en la tuya. El ORM de SQLAlechemy se encargará de generar identificadores y llenar objetos con ellos si usa la clase basada en la base declarativa que ha definido para crear instancias de su objeto.
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)