我正在使用pymysql将大型csv文件加载到数据库中,因为内存限制即使用load infile而不是insert。然而,在代码完成后,当我查询服务器时,它为表中的数据返回一个空集。
import pymysql
conn = pymysql.connect(host = 'localhost', port = 3306, user = 'root', passwd = '', local_infile = True)
cur = conn.cursor()
cur.execute("CREATE SCHEMA IF NOT EXISTS `test`DEFAULT "
"CHARACTER SET utf8 COLLATE utf8_unicode_ci ;")
cur.execute("CREATE TABLE IF NOT EXISTS "
"`test`.`scores` ( `date` DATE NOT NULL, "
"`name` VARCHAR(15) NOT NULL,"
"`score` DECIMAL(10,3) NOT NULL);")
conn.commit()
def push(fileName = '/home/pi/test.csv', tableName = '`test`.`scores`'):
push = """LOAD DATA LOCAL INFILE "%s" INTO TABLE %s
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(date, name, score);""" % (fileName, tableName)
cur.execute(push)
conn.commit()
push()
我收到一些截断警告,但没有其他错误或警告可以解决。关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
我做了一些事来解决这个问题,首先我更改了我的sql server的配置文件以允许加载infile,遵循MySQL: Enable LOAD DATA LOCAL INFILE。然后问题出在线上,
LINES TERMINATED BY '\r\n'
修复是将其更改为
LINES TERMINATED BY '\n'
之后脚本运行正常并且明显快于逐行插入