Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » cx_Oracle с какогото удваивает количество аргументов в sql коде метода bulk_create() [RSS Feed]

#1 Фев. 20, 2014 10:24:56

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

cx_Oracle с какогото удваивает количество аргументов в sql коде метода bulk_create()

Oracle database 11.2, Oracle Linux 6, python3.3, django 1.6, cx_Oracle 5.1.2

Проблема начилась с подвисания выполнения метода bulk_create при 10000 записей.
Опытным путём удалось установить, чтоб генерируется отвратительный sql-код.
Пример:

class Author(models.Model):
    name = models.CharField(max_length=100)
    mail = models.EmailField(max_length=254)

>>> from app_main.models import *
>>> a = Author.objects.using('ORACLE')
>>> from django import db
>>> reset = db.reset_queries
>>> conns = db.connections['ORACLE']
>>> a_list = [Author(name='CONSOLE', mail='ma@na.vd') for _ in range(10)]
>>> reset()
>>> conns.queries
[]
>>> a.bulk_create(a_list)
[<Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>, <Author: Author object>]
>>> conns.queries
[{'sql': 'QUERY = \'INSERT INTO "APP_MAIN_AUTHOR" ("NAME", "MAIL") SELECT :arg0, :arg1 FROM DUAL UNION ALL SELECT :arg2, :arg3 FROM DUAL UNION ALL SELECT :arg4, :arg5 FROM DUAL UNION ALL SELECT :arg6, :arg7 FROM DUAL UNION ALL SELECT :arg8, :arg9 FROM DUAL UNION ALL SELECT :arg10, :arg11 FROM DUAL UNION ALL SELECT :arg12, :arg13 FROM DUAL UNION ALL SELECT :arg14, :arg15 FROM DUAL UNION ALL SELECT :arg16, :arg17 FROM DUAL UNION ALL SELECT :arg18, :arg19 FROM DUAL\' - PARAMS = (\'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\', \'CONSOLE\', \'ma@na.vd\')', 'time': '0.158'}]

Как видно вместо 10 параметров он генерирует :arg0 - :arg19, из-за этого жутко проседает скорость выполнения на других запросах и бОльшем количестве записей. Я в шоке, что за х….
Что я делаю не так? Кто с подобным сталкивался? Может проблема не в cx_Oracle?
Цель - нормально прогнать все джанговские методы на Oracle.

Отредактировано buddha (Фев. 20, 2014 10:27:21)

Офлайн

  • Начало
  • » Django
  • » cx_Oracle с какогото удваивает количество аргументов в sql коде метода bulk_create()[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version