MySQL LOAD DATA - 加载ColumnName = Value格式的文本文件

时间:2009-08-05 08:27:44

标签: mysql load-data-infile

我在过去几天开始学习SQL,但在尝试将数据放入表格时陷入困境。

数据存储在文本文件中,格式为:

ColumnName1=SomeInteger
ColumnName2=SomeInteger
ColumnName3=SomeString
... etc

到目前为止,我已经设法通过剥离Python中的=SomeValue来创建一个表(其中包含大约150个列,我希望在我知道更多后分开并分组)。然后使用CREATE TABLE将列名称包装在电子表格中。有点乱,但它现在有效。

现在我陷入了以下困境:

LOAD DATA INFILE 'path/to/file.txt'
INTO TABLE tableName
COLUMNS TERMINATED BY '\n'
LINES STARTING BY '=';

我正在尝试让SQL将数据插入到指定的列名中(因为它们并不总是以相同的顺序),忽略等号,并使用唯一的文件名作为索引。 我还尝试使用'\='转义equals字符,因为MySQL文档提到应该忽略LINES STARTING BY参数之前的所有内容。键入LINES STARTING BY 'ColumnName1='会设法忽略第一个实例,但这不是我想要的,并且对剩余的行不起作用。

如果有人能指出我正确的方向,我不反对阅读更多文档或教程。

编辑:行分隔如下:我已经获得了大约100,000个ini文件。其中每个名为FirstName_LastName.ini(保证唯一性),每行数据都包含在ini文件中。我需要将古老的帐户存储方法带入21世纪。 据传,MySQL的LOAD DATA对于这类任务来说特别快,这就是为什么我开始将它作为一种选择。我只是想知道是否有可能操纵它来处理我的格式数据,或者如果我最好通过解析器放入所有100k文件。如果有任何魔术师在阅读此内容,我仍然愿意接受使用SQL的建议。

p.s:如果有人对如何将我的数据(从这种文本格式)提取到单个表格有更好的想法,我也很乐意听到它们。

1 个答案:

答案 0 :(得分:0)

就个人而言,我可能会在python中使用MySQLdb模块(可能在您喜欢的发行版中名为python-mysqldb或MySQL-python的软件包中提供)。将数据格式化为元组列表,然后插入。 http://mysql-python.sourceforge.net/MySQLdb.html的示例:

import MySQLdb

datalist = [("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
            ("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
            ("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )]

db = MySQLdb.connect(user='dude', passwd='foo', db='mydatabase')
c = db.cursor()

c.executemany(
    """INSERT INTO breakfast (name, spam, eggs, sausage, price)
    VALUES (%s, %s, %s, %s, %s)""",
    datalist)