База данных SQLite INSERT

Могу ли я вставить 100 000 заметок за ‹=1 секунду (база данных SQLite). Сейчас я использую библиотеку Python. Мой код здесь. У меня есть результат 100 000 заметок за 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()

person Оксана Егорова    schedule 08.12.2016    source источник


Ответы (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)

Я использую символ ?, чтобы предотвратить использование форматирования строки (и его следует использовать в качестве наилучшей практики). На моем компьютере я увеличился с ~ 1 секунды до ‹ 0,3 секунды.

person Tiger-222    schedule 08.12.2016

да, вы можете, но это зависит от вашей машины, например, моя машина работала менее 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()
person metmirr    schedule 08.12.2016

Дело не в коде, скорость вставки зависит от нескольких переменных:

  • Спектакли ПК.
  • Сам запрос зависит от того, сколько значений и записей вы хотите вставить, типа поля и насколько велико значение, которое вы хотите вставить.
  • Если вы вставляете строки в онлайн-базу данных, сетевое подключение также играет свою роль.

Чтобы увидеть, станет ли скорость выше, вы можете попробовать вставить значения на более постоянную машину (например, на сервер).

person Belfed    schedule 08.12.2016