数据库SQLite INSERT

时间:2016-12-08 12:40:55

标签: python performance sqlite query-performance

我可以在< = 1秒内插入100k笔记(数据库SQLite)。我现在使用python库。我的代码在这里。我在1.5秒内得到100k笔记。

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 个答案:

答案 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秒钟到了<1秒。 0.3秒。

答案 1 :(得分: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()

答案 2 :(得分:0)

这不是代码问题,插入速度是由几个变量引起的:

  • 电脑表演。
  • 查询本身,取决于您要插入的值和记录的数量,字段类型以及要插入的值的大小。
  • 如果要在在线数据库中插入行,网络连接也会自行完成。

要查看速度是否越来越高,您可以尝试在更多的permormant机器(如服务器)上插入值。