2016-12-08 4 views
0

Могу ли я вставить примечания 100k в < = 1 секунда (база данных sqlite). Я использую библиотеку python. Мой код здесь. У меня есть результат 100k за 1,5 секунды.База данных sqllite

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() 

ответ

0

да вы можете, но это зависит от вашей машины, например, моя машина сделал меньше, чем 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() 
0

Это не вопрос кода, скорость вставки обусловлена ​​несколькими переменными:

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

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

1

Вы можете хранить все данные в список и передать этот список 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 сек.