PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

impossible de créer une clé primaire auto-incrémentée avec flask-sqlalchemy

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)