python postgresql orm 截断表
Posted
技术标签:
【中文标题】python postgresql orm 截断表【英文标题】:python posgresql ormar truncate table 【发布时间】:2022-01-17 12:17:12 【问题描述】:我目前在 python 中使用 ormar 来处理 postgresql 的东西,我也在学习。通过使用这个带有 fastapi、postgress 和 traefik 的 docker git 作为模板来启动我的项目,我发现该示例在内部使用了 ormar,所以我尝试通过将我的代码转换为它来使用它。
对于这种情况,我想在添加另一组新数据之前先截断表,这样,我的 ID 作为每一行的主键将被重置,而不是每次我删除并重新插入数据时递增。
目前我正在使用此命令进行删除
await MyClass.objects.delete(each=True)
使用上面的代码,我可以删除每一行并重新插入数据,但我的 ID 正在增加而不是重置。每次将数据重新插入表中时,我该怎么做才能重置我的 ID?
【问题讨论】:
【参考方案1】:Postgresql 数字 ID 由 sequence 对象生成。截断表或删除所有行不会重置序列。
您可以像这样重置序列:
SELECT setval('tbl_seq_id'::regclass, 1, false)
其中tbl_seq_id
是与您的id
列关联的序列,1
是您希望下一个id
的值。
您可以通过调用pg_get_serial_sequence 函数获取与列关联的序列的名称(归功于Evan Carroll 和此answer)。
test# select pg_get_serial_sequence('tbl', 'id');
pg_get_serial_sequence
════════════════════════
public.tbl_id_seq
【讨论】:
请注意,虽然您可以重置序列,但最好避免依赖具有特定值的 id。以上是关于python postgresql orm 截断表的主要内容,如果未能解决你的问题,请参考以下文章
tds_fdw PostgreSQL 外部表将大文本截断为 2048 个字符