Không có gì sai với đoạn mã trên. Trên thực tế, bạn thậm chí không cần autoincrement=True
hoặc db.Sequence('seq_reg_id', start=1, increment=1),
vì SQLAlchemy sẽ tự động đặt Integer
đầu tiên Cột PK không được đánh dấu là FK là autoincrement=True
.
Ở đây, tôi đã tổng hợp một thiết lập hoạt động dựa trên thiết lập của bạn. ORM của SQLAlechemy sẽ đảm nhận việc tạo id và điền các đối tượng vào chúng nếu bạn sử dụng lớp dựa trên Cơ sở khai báo mà bạn đã xác định để tạo các phiên bản đối tượng của mình.
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)