PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Autoinkrementierender Primärschlüssel kann nicht mit Flask-sqlalchemy erstellt werden

Mit dem obigen Code ist nichts falsch. Tatsächlich brauchen Sie nicht einmal autoincrement=True oder db.Sequence('seq_reg_id', start=1, increment=1), da SQLAlchemy automatisch die erste Integer setzt PK-Spalte, die nicht als FK markiert ist, als autoincrement=True .

Hier habe ich ein funktionierendes Setup zusammengestellt, das auf Ihrem basiert. Das ORM von SQLAlechemy kümmert sich darum, IDs zu generieren und Objekte damit zu füllen, wenn Sie die deklarative Basis-basierte Klasse verwenden die Sie definiert haben, um Instanzen Ihres Objekts zu erstellen.

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)