Peewee 在迁移期间不使用主键递增整数字段
Peewee incrementing an integer field without the use of primary key during migration
我有一个 table 我需要向其中添加列,其中之一是指示业务逻辑的列。所以把它想象成一个 "priority" 列,它必须是唯一的并且是一个整数字段。它不能是主键,但对于业务逻辑而言是唯一的。
我搜索了文档,但找不到添加列和添加默认值(比如从 1 开始)并自动递增它们的方法,而无需将其设置为主键..
这样创建字段就像
example_column = IntegerField(null=False, db_column='PriorityQueue',default=1)
由于唯一约束,这将失败。我还应该提到当我迁移 table 时会发生这种情况(现有数据将全部收到值“1”)
那么,是否可以以某种方式执行上述操作并使列自动递增?
这绝对是可能的,尤其是在 peewee 之外。你绝对可以制作一个从 1 开始并递增到停止的计数器,并以你选择的时间间隔使用 range()。然后,您可以在迭代时将每个递增的变量写入每行中的所需字段。
取决于你的数据库,但 postgres 使用序列来处理这种事情。 Peewee 字段接受序列名称作为初始化参数,因此您可以以这种方式传递它。
我有一个 table 我需要向其中添加列,其中之一是指示业务逻辑的列。所以把它想象成一个 "priority" 列,它必须是唯一的并且是一个整数字段。它不能是主键,但对于业务逻辑而言是唯一的。
我搜索了文档,但找不到添加列和添加默认值(比如从 1 开始)并自动递增它们的方法,而无需将其设置为主键..
这样创建字段就像
example_column = IntegerField(null=False, db_column='PriorityQueue',default=1)
由于唯一约束,这将失败。我还应该提到当我迁移 table 时会发生这种情况(现有数据将全部收到值“1”)
那么,是否可以以某种方式执行上述操作并使列自动递增?
这绝对是可能的,尤其是在 peewee 之外。你绝对可以制作一个从 1 开始并递增到停止的计数器,并以你选择的时间间隔使用 range()。然后,您可以在迭代时将每个递增的变量写入每行中的所需字段。
取决于你的数据库,但 postgres 使用序列来处理这种事情。 Peewee 字段接受序列名称作为初始化参数,因此您可以以这种方式传递它。