直接上代码,需要注意的是当执行插入或更新操作时尽量使用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()