gpt4 book ai didi

python - 无法使用 flask-sqlalchemy 创建自动递增主键

转载 作者:IT老高 更新时间:2023-10-28 22:00:58 26 4
gpt4 key购买 nike

我希望我的模型的主键是一个自动递增的整数。这是我的模型的样子

class Region(db.Model):
__tablename__ = 'regions'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(100))
parent_id = db.Column(db.Integer, db.ForeignKey('regions.id'))
parent = db.relationship('Region', remote_side=id, primaryjoin=('Region.parent_id==Region.id'), backref='sub-regions')
created_at = db.Column(db.DateTime, default=db.func.now())
deleted_at = db.Column(db.DateTime)

上面的代码创建了我的表,但没有使 id 自动递增。因此,如果在我的插入查询中我错过了 id 字段,它会给我这个错误

ERROR: null value in column "id" violates not-null constraint

所以我将 id 声明更改为如下所示

id = db.Column(db.Integer, db.Sequence('seq_reg_id', start=1, increment=1),
primary_key=True)

还是同样的错误。上面的代码有什么问题?

最佳答案

上面的代码没有错。事实上,你甚至不需要 autoincrement=Truedb.Sequence('seq_reg_id', start=1, increment=1), 因为 SQLAlchemy 会自动设置第一个 Integer PK 列未标记为 FK 为 autoincrement=True

在这里,我根据您的设置整理了一个工作设置。 SQLAlechemy 的 ORM 将负责生成 id 并用它们填充对象如果您使用您定义的基于 Declarative Base 的类来创建对象的实例。

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.debug = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:password@localhost/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)

关于python - 无法使用 flask-sqlalchemy 创建自动递增主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com