相关疑难解决方法(0)

如何在Django中执行批量插入?

在mysql中,您可以在一个查询中向表中插入多行,其中n> 0:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9), ..., (n-2, n-1, n);
Run Code Online (Sandbox Code Playgroud)

有没有办法用Django查询集方法实现上述目的?这是一个例子:

values = [(1, 2, 3), (4, 5, 6), ...]

for value in values:
    SomeModel.objects.create(first=value[0], second=value[1], third=value[2])
Run Code Online (Sandbox Code Playgroud)

我相信以上是为for循环的每次迭代调用插入查询.我正在寻找单个查询,这在Django中可能吗?

sql django

34
推荐指数
3
解决办法
3万
查看次数

批量存在检查+保存 - Django

  • 我有一个CSV文件,列出了需要存储在数据库中的项目。

  • 我需要检查哪些项目尚未存储,如果未存储,我需要将它们保存在数据库中。

  • 2-5 百万行。


该模型是 Django 的 User 模型。

我有一个以下形式的 CSV 文件:

项目 ID、姓氏保单编号、性别、职务、开始日期

这是代码:

import csv

reader = csv.reader(open('items.csv', 'rb'))

for index, row in enumerate(reader):
    if User.objects.filter(username=row[2]).count():
        continue
    try:
        user = User(username=row[2],last_name=row[1],password='*')
        user.save()
    except Exception, e:
        print e
    del user
    del row
    del index
Run Code Online (Sandbox Code Playgroud)

您有什么方法可以推荐吗?

python sql sql-server django django-models

5
推荐指数
1
解决办法
1057
查看次数

在django中保存对象列表

我正在使用django 1.5,我正在尝试做这样的事情:

    quotes = formset.save()
    user = client_form.save()
    for quote in quotes:
        quote.client = user
    quotes.save()
Run Code Online (Sandbox Code Playgroud)

但是列表没有save()方法,所以有一些内置的功能可以做类似的事情吗?

我发现这个关于在Django中批量保存对象的问题

django 1.5仍然是真的吗?有没有办法避免对列表的每个对象进行save()调用?

这是我的实际视图代码:

def new_quote(request):
    QuoteLineFormSet = modelformset_factory(QuoteLine, form=QuoteLineForm, extra=2)

    if request.method == 'POST':
        formset = QuoteLineFormSet(request.POST, request.FILES, queryset=QuoteLine.objects.none())
        quote_form = QuoteForm(request.POST, request.FILES)
        if formset.is_valid() and quote_form.is_valid():
            quote_lines = formset.save(commit=False)
            #quote_lines = formset.get_queryset()
            quote = quote_form.save()
            for quote_line in quote_lines:
                quote_line.quote = quote
                quote_line.save()
            request.session['quote_id'] = quote.id
            return HttpResponseRedirect(reverse('new_client'))
    else:
        formset = QuoteLineFormSet(queryset=QuoteLine.objects.none())
        quote_form = QuoteForm()

    return render(request, 'request_quote_form.html', {
        'formset': …
Run Code Online (Sandbox Code Playgroud)

python django django-orm django-views django-1.5

4
推荐指数
1
解决办法
6342
查看次数