Python 删除表、SQLAlchemy、Postresql后初始化序列
我在Flask API中使用带有sqlalchemy的Postgres数据库,我的数据库模型定义如下:Python 删除表、SQLAlchemy、Postresql后初始化序列,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我在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)) 问题是当我在一个视图中执行Ca
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,用1重新启动更改序列“Cache1\u id\u seq”。
有人能告诉我在炼金术中如何做到这一点吗。感谢您在adcance中使用ALTER SEQUENCE
命令修改PostgreSQL序列。没有用于此的内置SQLAlchemy函数,请使用session.execute
执行SQL
db.session.execute("ALTER SEQUENCE Cache1_id_seq RESTART WITH 1")
db.session.commit()
好的,我意识到这可能是一个恼人的问题,但为什么你需要重置序列?我假设您正在清除缓存以重新加载新数据,因此加载的条目不一定会获得与重新加载之前相同的id代码>如果您的ORM支持。(并注意引用此表的外键)@joop我也尝试了截断表但是每次删除缓存表后,我都应该在postgres中执行。我正在寻找一种从sqlalchemy重新启动标识的方法。@JoachimIsaksson是的,这是真的,但在我的情况下,每次我只需要存储当时可以缓存的内容的名称(不应保留过去的记录)db.session.execute('ALTER SEQUENCE“Cache1\u id\u seq”restart WITH 1')
?不过,通常没有什么好的理由需要重置序列。通常是因为一些不重要的原因,比如化妆的原因。我很欣赏这个答案,但是我不清楚test\u id\u seq
。将帮助您更新答案以使用OP的表名(Cache1\u id\u seq
)。更多详细信息:答案已更新