Ускорение записи в бд в Python

198 просмотра
0
0 Комментариев

Здравствуйте.

Не спрашивайте зачем, но мне нужно записать в бд числа от 1000000000000 до 9999999999999.

import sqlite3
 
conn = sqlite3.connect('db.db')
c = conn.cursor()
 
d = 1000000000000
 
for x in xrange(8999999999999):
    d += 1
 
    sql = 'INSERT INTO number (d) VALUES("' + str(d) + '")'
    c.execute(sql)
    print d
 
conn.commit()
conn.close()

Работает скрипт медленно. Такими темпами он будет работать с неделю. Как можно ускорить?

P.S. Спасибо Timofey Bondarev. Подсказал про xrange и про вынесение commit за цикл. Может ещё можно как-то оптимизировать?


Добавить комментарий

1 Ответы

Python Опубликовано 10.12.2018
0

Не знаю, относится ли проблема к БД, но в коде, непосредственно составляющем запрос определённо можно внести улучшения:

В Python 2 вместо range стоит использовать xrange, если вам не нужен непосредственно сам список.

Определённо не стоит делать commit после каждой записи в базу, достаточно сделать его после цикла.


Update

Возможно, есть смысл сделать это одним выражением, это нужно проверять на реальном примере:

query = ('INSERT INTO number (d) VALUES ' +
         ','.join('("%s")' % x for x in xrange(1000000000000, 10000000000000)));
 
c.execute(query)
conn.commit()

Ну и конечно же, даже если это не поможет, нет смысла управлять вручную переменной d, достаточно передать правильные аргументы в xrange: xrange(1000000000000, 10000000000000) как раз сгенерирует нужную последовательность чисел.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up