python - 避免 Django 中的重复查询

标签 python django loops

我正在我的应用程序中使用 CSV 数据。 CSV 文件中的一列包含一个名称。对于每一行,我需要检查该名称是否已注册。如果是,我将存储一个变量并稍后使用它:

data = []
with open(path) as f:
    reader = csv.reader(f)
    for row in reader:
        user = False
        check_user = User.objects.filter(name=row[0])
        if check_user:
            user = check_user[0] # This will only return a single row so I want that one to be stored in the user variable instead of a list
        data.append({'name': row[0], 'age': row[1], 'phone': row[2], 'user': user})

然后在我看来我会做类似的事情:

{% for info in data %}
  <td>{{ data.name }}</td>
  <td>{% if data.user %}} {{ data.user.name }} {% else %} No user {% endif %}</td>
{% endfor %}

问题

这一切都运作良好。但是,问题是 CSV 文件中的列表包含许多重复的名称。所以我可以有 1,000 条记录,其中只有 10 个不同的名称。但在当前场景中,将对数据库进行 1,000 次查询。我想要做的,但我不知道如何做,是以某种方式检查名称是否已经被查找过,如果是,则应该使用以前的查询结果而不是进行新的查询。

澄清

在我的用户表中,我有 alice、bob、marta

在我的 CSV 文件中,我有如下记录:

name,age,phone
marta,30,12345
marta,30,12345
marta,30,12345
marta,30,12345
bob,22,33555
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939
alice,55,1939

在上面的例子中,我只有三个唯一的名称,所以我只想对数据库进行 3 个不同的查询。在我当前的设置中,每一行都会导致一个查询,这会浪费资源(而且 CSV 文件非常大,有很多重复的名称,这一事实使情况更加复杂)。

最佳答案

您可以使用 numpy 执行以下操作

使用 numpy 加载 csv 文件

data = np.loadtxt(path)

要求 numpy 从数据列中返回唯一的名称

names_column = data[:,0] # if the names are in 0th column
unique_names = np.unique(names_column,return_index=True)

return_index 将为您提供列中唯一名称的索引,您可以使用它进行进一步处理。

编辑

特别是对于您粘贴的示例输入,您可以执行以下操作

data = np.genfromtxt('in_data',dtype=None,names=True,delimiter=',')
print np.unique(data['name'],return_index=True)

输出将如下所示:

(array(['alice', 'bob', 'marta'], dtype='|S5'), array([5, 4, 0]))

关于python - 避免 Django 中的重复查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51036397/

相关文章:

python - 使用 tf.Dataset 训练的模型进行推理

python - 安全地从 python 中的字符串中删除所有 html 代码

python - Raspberry PI 通过 URL 向 PHP 脚本发送数据

python - 在 django 查询中连接过滤器

c - 为什么这样会产生无限循环(C,While Loop)

arrays - 如何从 Swift 中的对象字典中获取键和值?

python - 将 4d 张量切片为较小子张量的 4D 张量(仅在最后 2 个维度进行切片)

Django - 将 view.py 拆分为小文件

django - 表单不在 Django 中发布

javascript - 遍历对象时更新状态值