直接上代码,需要注意的是当执行插入或更新操作时尽量使用execute_batch。sqlite执行事务操作的开销是很大的,所以应尽量减少执行commit的次数。我做了一个简单的实验,插入1百万行的数据(每行三列INT型数据),一条一条插入需要半个小时,而以128K为一个batch批量插入只需要3分钟。
try:
import sqlite3 as sqlite
except:
from pysqlite2 import dbapi2 as sqlite
class SqliteWrapper:
def __init__(self):
self.__conn = None
self.__cursor = None
def __del__(self):
self.close()
def connect(self, dbfile):
self.close()
self.__conn = sqlite.connect(dbfile)
self.__cursor = self.__conn.cursor()
def close(self):
if self.__cursor:
self.__cursor.close()
self.__cursor = None
if self.__conn:
self.__conn.close()
self.__conn = None
def select(self, sql):
self.__cursor.execute(sql)
return self.__cursor.fetchall()
def execute(self, sql):
self.__cursor.execute(sql)
self.__conn.commit()
def execute_batch(self, sqls):
for sql in sqls:
self.__cursor.execute(sql)
self.__conn.commit()