【发布时间】:2016-07-13 01:37:16
【问题描述】:
我在我的 Flask API 中使用带有 sqlalchemy 的 Postgres 数据库,我的数据库模型定义如下:
class Cache1(db.Model):
__tablename__ = 'Cache1'
id = db.Column(db.Integer, Sequence('Cache1_id_seq', start=1, increment=1), primary_key=True)
name = db.Column(db.String(20))
问题是当我在我的一个视图中执行 Cache1.query.delete() 然后我尝试将新记录放入 Cache1 时,序列号不是从 1 开始。我应该总是去 Postgres 并执行 ALTER SEQUENCE "Cache1_id_seq" RESTART WITH 1 .
有人可以告诉我在 Sqlalchemy 中执行此操作的方法吗?提前谢谢你
【问题讨论】:
-
好的,我知道这可能是一个烦人的问题,但是为什么您需要重置序列?我假设您正在清除缓存以重新加载新数据,因此加载的条目不一定会获得与重新加载之前相同的 id。
-
如果您的 ORM 支持,您可以尝试
TRUNCATE TABLE xxxxx RESTART IDENTITY;。 (并注意引用此表的外键)postgresql.org/docs/9.5/interactive/sql-truncate.html -
@joop 我也尝试过
TRUNCATE TABLE ...,但每次删除缓存表后,我都应该在 postgres 中执行此操作。我正在寻找一种从 sqlalchemy 重新启动身份的方法。 -
@JoachimIsaksson 是的,确实如此,但就我而言,每次我只需要存储当时可以缓存的内容的名称(不应保留过去的记录)
-
db.session.execute('ALTER SEQUENCE "Cache1_id_seq" RESTART WITH 1')?但是,通常没有充分的理由需要重置序列。通常是为了一些不重要的事情,比如美观的原因。
标签: python postgresql sqlalchemy