【发布时间】:2015-08-31 08:09:33
【问题描述】:
[情境-目标]
我们有一个 100 万行的 CSV 数据集。这些需要导入到 mysql 5.6 数据库,带有 innodb 引擎的表,具有以下列(匹配 csv 文件):
第 1 列:bigint(15)
第 2 列:日期时间
要导入这些数据,我们可以使用以下 python 脚本:
#python version: 3.4.3
#mysql connector version: 2.0.4
#Note: this is just a simple example script!
import mysql.connector
import csv
#Set-up db connection
cnx = mysql.connector.connect(user='user', password='secret', database='mydatabase')
cursor = cnx.cursor()
#read/ open csv
reader = csv.reader(open("C:/test.csv", "rt"))
#ignore header
next(reader)
#read CSV and send to mysql
for row in reader:
id=row[0]
adate = row[1]
cursor.execute("""INSERT INTO mytable VALUES ('%s','%s')""" % (id,adate))
#commit the query
cnx.commit()
[问题]
当我将 cnx.commit() 放入 for 循环中时,概念上会发生什么,如下所示:
for row in reader:
id=row[0]
adate = row[1]
cursor.execute("""INSERT INTO mytable VALUES ('%s','%s')""" % (id,adate))
cnx.commit()
- 如果我理解正确的话,这是在每次迭代后强制 mysql 写入与 mysql 将所有内容存储在其缓存中然后发送 commit() - 写入命令之间的区别。
- 这样做有哪些性能提升/缺点?
- 您是否遵守任何约定/最佳做法或做法?为什么?
谢谢!
【问题讨论】:
-
有点跑题了:你考虑过
LOAD DATA INFILE的用法吗?另请阅读transactions。 -
欢迎来到 Stack Overflow,感谢您提出一个好问题!
标签: mysql python-3.x transactions database-performance