我在peeweeorm中有一个带有unique=True
字段的模型。我将数据保存到MySQL数据库,如下所示:
try:
model.save()
except IntegrityError: # do not save if it's already in db
pass
但当peewee试图保存已经存在于db中的数据时,MySQL增加id和id的顺序被破坏了。如何避免这种行为?在
以下是我要保存的模型:
^{pr2}$我正在保存它:
for article in feedparser.parse(vendor.feed)['items']:
try:
entry = FeedItem()
entry.construct(vendor.name, article.link, article.title)
except IntegrityError:
pass
我不确定这是否有效,但你可以试试:
通过包装在
atomic()
中,代码将在事务中执行(如果已经在事务中,则为保存点)。这可能导致ID序列保持不变。在不过,我同意David的回答,即这实际上是一个数据库细节,不应该成为应用程序逻辑的一部分。如果您需要单调递增的id,您应该自己实现它。在
你不会的
数据库生成的标识符超出您的控制范围。它是由数据库生成的。不能保证所有的标识符都必须是连续的并且没有间隔,只是它们是唯一的。有许多事情会导致某个数字不在该序列中出现,例如:
可能还有更多的我没有考虑。但问题是,你根本不需要控制这个值,数据库引擎可以控制。在
如果要控制该值,请不要使用
autoincrement
。但是要知道,这会带来一大堆其他问题,你需要解决这些问题,autoincrement
可以为你解决。或者您必须切换到GUID而不是整数,这本身可能会导致您需要考虑的其他因素。在相关问题 更多 >
编程相关推荐