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)