本来很自信的觉得可以直接写到数据库。没想到遇到了些问题。(还是需要虚心学习啊)
# -*- coding: utf-8 -*-
import MySQLdb
def wdb():
#数据库操作
conn= MySQLdb.connect(
host='localhost',
port = 3306,
user='root',
passwd='1234'
)
conn.select_db('zzu')
cur = conn.cursor()
cur.execute("SET NAMES utf8")
#测试文本2万行
fp = open("file.txt",'r')
for line in fp.xreadlines():
ls = line.strip().split('----')
try:
cur.execute("INSERT INTO dbname VALUES ('"+ls[0]+"','"+ls[1]+"')")
conn.commit()
except:
conn.rollback() # 发生错误时回滚
cur.close()
conn.close()
if __name__ == '__main__':
wdb()
本以为很快就执行完了呢?万万没想到竟然出奇的慢,而且要命的是就插入了2102行,这个问题搁置了两天,我现在才来解决!
经过调试发现:
执行慢的原因是因为for循环下的*conn.commit()语句,不用每插入一句就提交,最后提交一次就行,所以把conn.commit()*语句放在循环外面就行了。
插入很少的原因是因为当插入异常时我执行回滚的操作,其实我没必要做事务操作,所以删去*conn.rollback()*语句就行了。
修改后的程序执行2万行也就是2-3秒!