sql >> Base de Datos >  >> RDS >> PostgreSQL

no se puede crear una clave principal de incremento automático con matraz-sqlalchemy

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)