База данных SQLite INSERT
Могу ли я вставить 100k заметок за <=1 секунд (база данных SQLite). Сейчас я использую библиотеку python. Мой код здесь. У меня получилось 100k заметок за 1,5 секунды.
conn = sqlite3.connect('data8.sqlite')
c = conn.cursor()
for i in range(1,100000):
c.execute('''INSERT INTO data ('val1','val2','val3','val4','val5','val6','val7','val8','val9','val10')\
VALUES ('%d','%d','%d','%d','%d','%d','%d','%d','%d','%d')''' % (1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
conn.commit()
c.close()
conn.close()
3 ответа
Вы можете сохранить все данные в список и передать этот список executemany()
:
data = []
for i in range(1, 100000):
data.append((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
c.executemany('INSERT INTO data (val1, val2, val3, val4, val5, val6, val7, val8, val9, val10) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', data)
Я использую ?
char, чтобы предотвратить использование форматирования строки (и это следует использовать в качестве лучшей практики). В моем компьютере, я пошел от ~ 1 сек до < 0,3 сек.
Дело не в коде, скорость вставки зависит от нескольких переменных:
- Выступления на ПК.
- Сам запрос зависит от того, сколько значений и записей вы хотите вставить, тип поля и насколько велико значение, которое вы хотите вставить.
- Если вы вставляете строки в онлайн-базу данных, сетевое соединение также играет свою роль.
Чтобы увидеть, увеличивается ли скорость, вы можете попытаться вставить значения на более постоянную машину (например, на сервер).
Да, вы можете, но это зависит от вашей машины, например, моя машина сделала менее 1 мс и не использовать ' '
как это INSERT INTO data ('val1','val2' ...
использовать этот INSERT INTO data (val1,val2 ...
:
conn = sqlite3.connect('data8.sqlite')
c = conn.cursor()
c.execute("""
CREATE TABLE IF NOT EXISTS data (
val1 integer,
val2 integer
)
""")
for i in range(1,100000):
c.execute('''INSERT INTO data (val1, val2)\
VALUES (%d, %d)''' % (1, 2))
row= c.execute("""select count(*) from data""")
print(row.fetchone())
conn.commit()
c.close()
conn.close()