快速MySQL导入

时间:2014-05-20 14:54:13

标签: python mysql python-3.3

编写一个脚本来转换MySQL导入的原始数据我到目前为止使用了一个临时文本文件,后来我使用LOAD DATA INFILE ...命令手动导入。

现在我将import命令包含在python脚本中:

    db = mysql.connector.connect(user='root', password='root',
                          host='localhost',
                          database='myDB')
    cursor = db.cursor() 
    query = """
    LOAD DATA INFILE 'temp.txt' INTO TABLE myDB.values
    FIELDS TERMINATED BY ',' LINES TERMINATED BY ';';
    """
    cursor.execute(query)
    cursor.close()
    db.commit()
    db.close()

这有效,但temp.txt必须位于数据库目录中,不适合我的需要。

下一个approch正在转储文件并直接提交:

    db = mysql.connector.connect(user='root', password='root',
                          host='localhost',
                          database='myDB')
    sql = "INSERT INTO values(`timestamp`,`id`,`value`,`status`) VALUES(%s,%s,%s,%s)"
    cursor=db.cursor()

    for line in lines:
        mode, year, julian, time, *values = line.split(",")
        del values[5]
        date = datetime.strptime(year+julian, "%Y%j").strftime("%Y-%m-%d")
        time = datetime.strptime(time.rjust(4, "0"), "%H%M" ).strftime("%H:%M:%S")
        timestamp = "%s %s" % (date, time)
        for i, value in enumerate(values[:20], 1):
            args = (timestamp,str(i+28),value, mode)
            cursor.execute(sql,args)
    db.commit()

同样适用,但需要大约四倍的时间,这太多了。 (在第一个版本中使用了相同的构造来生成temp.txt)

我的结论是我需要一个文件和LOAD DATA INFILE命令更快。要在文本文件放置的地方自由,LOCAL选项似乎很有用。但是使用MySQL Connector(1.1.7)存在已知错误: mysql.connector.errors.ProgrammingError:1148(42000):此MySQL版本不允许使用该命令

到目前为止,我已经看到使用MySQLdb而不是MySQL Connector可以解决这个问题。然而,MySQLdb上的活动似乎很少,Python 3.3支持可能永远不会出现。

LOAD DATA LOCAL INFILE是否可行?如果有的话,是否有可用的python 3.3工作连接器?

编辑:开发后,数据库将在服务器上运行,客户端上的脚本。

2 个答案:

答案 0 :(得分:2)

我可能错过了一些重要的内容,但是你不能在第一段代码中指定完整的文件名吗?

LOAD DATA INFILE '/full/path/to/temp.txt'

请注意,路径必须是服务器上的路径。

答案 1 :(得分:0)

要对每个可访问文件使用LOAD DATA INFILE,您必须设置 创建连接时LOCAL_FILES客户端标志

import mysql.connector
from mysql.connector.constants import ClientFlag
db = mysql.connector.connect(client_flags=[ClientFlag.LOCAL_FILES], <other arguments>)
相关问题