在文件mysql

时间:2017-03-07 04:36:32

标签: python mysql

我正在使用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()

我收到一些截断警告,但没有其他错误或警告可以解决。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

我做了一些事来解决这个问题,首先我更改了我的sql server的配置文件以允许加载infile,遵循MySQL: Enable LOAD DATA LOCAL INFILE。然后问题出在线上,

LINES TERMINATED BY '\r\n'

修复是将其更改为

LINES TERMINATED BY '\n'

之后脚本运行正常并且明显快于逐行插入