Уведомления

Группа в Telegram: @pythonsu

#1 Март 18, 2013 15:16:07

next-empirik
Зарегистрирован: 2012-12-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение SQL кода

Необходимо внести множество простых записей в таблицу, с orm как-то медленно все выходит. Решил использовать простой SQL. Почитал мануал, написал:

for row in rows:
    name = row.split('\t')[0].lower()
    print name
    try:
        cursor.execute("INSERT INTO domain_browser_domain (name) VALUES (%s)", [name])
    except django.db.utils.IntegrityError:
        continue
Если вытащить метод execute из блока try, то скрипт вылетает с ошибкой “IntegrityError”. Логично, потому что часть данных уже внесена, и значение в поле name должно являться уникальным. Ну а когда код в блоке try - никаких изменений в базу просто не вносится. Хотя бОльшая часть информации точно в базе не присутствует. Помогите, пожалуйста.

Офлайн

#2 Март 18, 2013 16:04:52

myarik
Зарегистрирован: 2012-11-20
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение SQL кода

Добавление данных:
from django.db import connection,transaction
cursor = connection.cursor()
query = “”“INSERT INTO domain_browser_domain (name) VALUES (%s)” % name“”"
cursor.execute(query)
transaction.commit()

https://django.readthedocs.org/en/1.4.X/topics/db/transactions.html – более детально расписано.

Отредактировано myarik (Март 18, 2013 16:34:30)

Офлайн

#3 Март 18, 2013 19:55:22

next-empirik
Зарегистрирован: 2012-12-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение SQL кода

myarik
Добавление данных:from django.db import connection,transactioncursor = connection.cursor()query = “”“INSERT INTO domain_browser_domain (name) VALUES (%s)” % name“”"cursor.execute(query)transaction.commit()https://django.readthedocs.org/en/1.4.X/topics/db/transactions.html – более детально расписано.
В этом случае скрипт вылетает с такой ошибкой:
django.db.transaction.TransactionManagementError: This code isn't under transaction management

Офлайн

#4 Март 18, 2013 22:13:08

myarik
Зарегистрирован: 2012-11-20
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение SQL кода

@transaction.commit_on_success
... def test_fun(request):
...     cursor = connection.cursor()
...     query = """ INSERT INTO domain_browser_domain (name) VALUES (%s)"""  % name
...     cursor.execute(query)
...     return HttpResponse("Ok")

Офлайн

#5 Март 19, 2013 12:31:08

next-empirik
Зарегистрирован: 2012-12-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение SQL кода

Я не разобрался, если честно, зачем мне нужно было описывать эту функцию с атрибутом. На самом деле, для ускорения выполнения операций, мне помог метод bulk_create().

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version