gpt4 book ai didi

python - 向 Django 数据库添加元素

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:31 24 4
gpt4 key购买 nike

我有一个大型元素数据库,每个元素都有唯一的键。每隔一段时间(每分钟一次)我会加载更多需要添加到数据库中的项目,但如果它们与数据库中已有的内容重复,它们将被丢弃。

我的问题是 - 是否更好...:

  1. 让 Django 给我一个包含所有唯一键的列表(或集合),然后在尝试添加每个新项目之前,检查它的键是否在列表中,或者,
  2. 在新项目的保存调用周围有一个 try/except 语句并回复 Django 捕获重复项?

干杯, jack

最佳答案

如果您使用的是 MySQL,您可以轻松使用 INSERT IGNORE,这将是最高效的解决方案。您可以直接使用游标 API 执行自定义 SQL 查询。 ( https://docs.djangoproject.com/en/1.9/topics/db/sql/#executing-custom-sql-directly )

如果您使用的是 Postgres 或其他一些支持INSERT IGNORE 的数据存储,那么事情会变得有点复杂。

对于 Postgres,您可以使用规则来制作您自己的 INSERT IGNORE 版本。

它看起来像这样:

CREATE RULE "insert_ignore" AS ON INSERT TO "some_table"
WHERE EXISTS (SELECT 1 FROM some_table WHERE pk=NEW.pk) DO INSTEAD NOTHING;

无论你做什么,都要避免“选择所有行并首先检查方法”,因为在 Python 中最坏情况下的性能是 O(n) 并且基本上会缩短数据库提供的任何性能优势,因为检查是在应用程序机器(最终也受内存限制)。

try/except 方法比“选择所有行”方法稍微好一些,但它仍然需要不断切换到应用程序服务器来处理每个冲突,尽管速度要快得多。最好让数据库完成这项工作。

关于python - 向 Django 数据库添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35711907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com