Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 1.4-使用列表批量创建_Python_Django - Fatal编程技术网

Python Django 1.4-使用列表批量创建

Python Django 1.4-使用列表批量创建,python,django,Python,Django,我有一个列表,我想在数据库中为它创建条目 我怎样才能做到这一点而不在列表中循环,我想,这会带走批量创建的要点 例如: 而不是 for x in list: bulk_create... 我怎么能 bulk_create for the entire list at once in an efficient manner 清单包括: list = ['abc', 'def', 'ghi'] 它只是一个id列表,而不是直接输入到bulk_create中的形式(不使用输入字段格式化)。但

我有一个列表,我想在数据库中为它创建条目

我怎样才能做到这一点而不在列表中循环,我想,这会带走批量创建的要点

例如:

而不是

for x in list:
    bulk_create...
我怎么能

bulk_create for the entire list at once in an efficient manner
清单包括:

list = ['abc', 'def', 'ghi']

它只是一个id列表,而不是直接输入到bulk_create中的形式(不使用输入字段格式化)。但是,我认为在将列表传递到bulk\u create之前可以修改它。

bulk\u create在一次调用中将对象列表作为单个参数。您在示例中所做的与循环和执行
create()

参考:

aList
指的是已经实例化并需要通过一个查询批量创建的对象列表。例如,如果您还没有未保存实例的列表,并且您有一个值列表,那么您可以使用以下内容创建列表:

values = ['abc', 'def', 'ghi']
# a list of unsaved Entry model instances
aList = [Entry(headline=val) for val in values]
或者,您可能有一个映射到模型的原始字典值列表:

values = [{headline="abc"}, {headline="def"}, {headline="ghi"}]
aList = [Entry(**vals) for vals in values]
您正在向ORM传递列表中实例化对象的列表。使用这个,假设orig_列表是一个字典列表

>>> my_objects = [MyObject(a=x['a'], b=x['b']) for x in orig_list]
>>> MyObject.objects.bulk_create(my_objects)

试着这样做,批量创建的要点是只命中数据库一次,不管您创建了多少个。这就是为什么我们认为它是有效的。

class Entry(models.Model):
    name = models.CharField(max_length = 10)

a = ['test1', 'test2', 'test3', 'test4']

Entry.objects.bulk_create([Entry(name=x) for x in a])
---编辑---

假设您有这样一个模型,在您的models.py中:

class Entry(models.Model):
    id = models.CharField(max_length = 10)
您有这样一个列表(直接从您的问题中复制):

只要一句话:

Entry.objects.bulk_create([Entry(id=x) for x in list])

这仍然需要我手动输入列表a中的参数。“你能想出什么办法跳过这个吗?”thong我想你忽略了我答案的一部分。此处列表a仅用于演示,无需“手动输入”。见编辑,谢谢!我对编程相当陌生,所以直到编辑时我才得到它。这仍然需要我手动在'aList'中输入参数。你能想办法跳过这个吗?我已经有一份清单了。我想我可以将它转换成一个字符串列表,每个字符串都与您在列表中列出的内容完全相同?@thong:我想您可能没有抓住要点。如果已经有对象列表,只需将该列表传递给
bulk\u create
一次即可。此示例显示了要传递列表,列表将包含哪些内容。如果你仍然对这一部分感到困惑,你能更新你的问题以显示你已经拥有的列表中的内容吗?列表的格式不是你的列表。我将尝试编辑或更改列表,看看是否有效。@thong:我刚刚更新了值列表以匹配您的示例。这解释了吗?是的!谢谢我道歉,因为我的不太具体的例子一开始一定让人困惑。我不明白。您想创建一个具有显式id的对象列表,而不是让它们自动加入?这就是你想要的吗?@jdi我将改变示例,并尝试给出一个更具体的示例。
class Entry(models.Model):
    id = models.CharField(max_length = 10)
list = ['abc', 'def', 'ghi']
Entry.objects.bulk_create([Entry(id=x) for x in list])