【问题标题】:how to prevent django database from using deleted objects' id for new objects?如何防止 django 数据库将已删除对象的 id 用于新对象?
【发布时间】:2014-05-31 06:34:59
【问题描述】:

我正在编写一个带有sqlite 数据库的django 网站,我的网站中有一个这样的模型:

class Foo(models.model):
   name = models.Charfield(max_length=30)

数据库为这个类创建一个唯一的Id 列,考虑我从类Foo 创建一个对象并删除它并创建另一个对象g,它们的Id 是相同的:

>> f = Foo.objects.create(name="fooname")
>> f.id
4
>> f.delete()
>> g = Foo.objects.create(name="fooname2")
>> g.id
4

但我不希望数据库将旧的已删除对象的id 用于新创建的对象,我该怎么做?

【问题讨论】:

    标签: python database django sqlite django-database


    【解决方案1】:

    这是 Django 1.7 中 fixed 的一个已知错误,请参阅:

    引用release notes:

    SQLite 数据库中的 AutoField 列现在将使用 AUTOINCREMENT 选项,保证单调增量。这将 导致 SQLite 上的主键编号行为发生变化,成为 与大多数其他 SQL 数据库一致。这将仅适用于 新创建的表。如果您有一个使用旧版本创建的数据库 Django 版本,您需要迁移它以利用 这个功能。

    【讨论】:

    • 所以这个bug只针对Sqlite?使用 MySql 也会解决我的问题吗?(不更新 django)
    • @Navid777 错误在 django 中,切换到 mysql 会有所帮助,是的。
    猜你喜欢
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多