Python 我的数据库已经有20行,但当我保存新行时,它们的id从1开始
现在,我已经将数据导入到了包含20行的数据库表中 当我对该表使用save()方法时,它们以pk=1开始保存数据,导致错误,并在pk=21时实现 尽管我的模型中的id列是默认的,但我不会覆盖它。第一个(可能也是最好的)选项是从导入的数据中删除id值,并允许Django管理自动递增的PK值()。如果您正在调用Python 我的数据库已经有20行,但当我保存新行时,它们的id从1开始,python,django,database,Python,Django,Database,现在,我已经将数据导入到了包含20行的数据库表中 当我对该表使用save()方法时,它们以pk=1开始保存数据,导致错误,并在pk=21时实现 尽管我的模型中的id列是默认的,但我不会覆盖它。第一个(可能也是最好的)选项是从导入的数据中删除id值,并允许Django管理自动递增的PK值()。如果您正在调用.save(),请不要在模型实例中包含ID值,这样可以解决您的问题。如果id值不是None,则可以在此处停止同步 如果这不适用于您的用例(例如,您需要导入的数据的ID值保持不变),第二个也是更复
.save()
,请不要在模型实例中包含ID值,这样可以解决您的问题。如果id
值不是None
,则可以在此处停止同步
如果这不适用于您的用例(例如,您需要导入的数据的ID值保持不变),第二个也是更复杂的选项是使用Django命令sqlsequencereset
(),该命令将返回需要执行的sql语句,以将自动递增的PK值重置为当前最大ID+1。在django应用程序中,可以运行以下代码来执行这些sql语句:
from django.db import connections
from django.core.management.color import no_style
# 'default' is the name of the database which may need to change
# execute the sequence_reset_sql command for all models in a specific 'APP_NAME'
sequence_sql = connections['default'].ops.sequence_reset_sql(
no_style(), [apps.get_model(['APP_NAME'], model) for model in models])
# execute the sql statements
with connections['default'].cursor() as cursor:
for sql in sequence_sql:
cursor.execute(sql)
^注意:这是针对Django 1.11的您能分享您的型号代码吗?请提供完整的错误消息,以及一个错误提示。