python操作mysql批量插入
通过python向mysql插入大量数据,execute与executemany对比效率差异极大。另有autocommit的自动提交与commit的手动提交操作方法。
·
一、大量信息插入
通过python向mysql插入大量数据时,可以有两种方法:
1、for + cursor.execute(sql),最后集中提交(commit())
2、cursor.executemany(sql,list)
两种方法效率上和功能上有一定差异。26万条数据,使用第一种方法需要约1.5小时,使用第二种方法只需要10几秒。
executemany的用法:
import pymysql
list_1 = [('a',1),('b',2),(None,3)] # 元素是不是元组都可以
sql_1 = 'insert into 表明(字段1,字段2) values(%s,%s)' # 注意,这里的%s不需要加引号,使用execute需要加引号。另外,executemany 在执行过程中能够将python的None转为sql的null,这一点挺方便的
db = pymysql.connect(host= ....)
cursor = db.cursor()
cursor.executemany(sql_1,list_1)
db.commit()
cursor.close()
db.close()
print('完成')
二、自动提交
在创建连接的时候,增加参数 autocommit = 1 ,当发生update等操作时,会实时更新到数据库内。否则要通过 conn.commit() 来提交到数据库进行具体操作。
如果没有设置自动提交,也没有手动提交,当进行插入或更新等操作时,只在本地客户端能看到更新,在其他客户端或数据库内,数据无变化。
# 实时操作,适合随时少量、频繁的更新
import pymysql
conn = pymysql.connect(
host='XXX.XXX.XXX.XXX',
user='XXXXX',
password='XXXXX',
db='XXXXX',
port=3306,
charset='utf8',
autocommit = 1 ,
)
# 集中大批量操作数据
import pymysql
conn = pymysql.connect(
host='XXX.XXX.XXX.XXX',
user='XXXXX',
password='XXXXX',
db='XXXXX',
port=3306,
charset='utf8',
)
SQl相关操作略
conn.commit() # 提交
更多推荐
已为社区贡献1条内容
所有评论(0)