0

我正在使用以下语句将文件中的数据加载到表中:

LOAD DATA LOCAL INFILE '/home/100000462733296__Stats" 
INTO TABLE datapoints 
FIELDS TERMINATED BY '|' 
LINES TERMINATED BY '\n' 
(uid1, uid2, status);

现在,如果我想在 uid1 中输入一个自定义值,比如 328383 而实际上并没有要求它从文件中读取它,我该怎么做?大约有 10 个文件,uid1 是每个文件的标识符。我正在寻找这样的东西:

LOAD DATA LOCAL INFILE '/home/100000462733296__Stats" 
INTO TABLE datapoints 
FIELDS TERMINATED BY '|' 
LINES TERMINATED BY '\n' 
(uid1="328383", uid2, status);

有什么建议么?

4

3 回答 3

3

SET 子句可用于提供不是从输入文件派生的值:

LOAD DATA LOCAL INFILE '/home/100000462733296__Stats" 
INTO TABLE datapoints 
FIELDS TERMINATED BY '|' 
LINES TERMINATED BY '\n' 
(uid1, uid2, status)
SET uid1 = '328383';

目前尚不清楚 uid1 的数据类型是什么,但是由于您将值括在双引号中,我认为它是与字符串相关的数据类型 - 如果数据类型是数字,请删除单引号。

关于LOAD FILE 文档SET中功能支持的内容还有更多内容需要阅读- 它位于页面下方的 1/2 多一点处。

于 2009-11-29T22:17:41.953 回答
1

您可以使用 python 交互式 shell 而不是 MySQL shell 来交互地为 MySQL 表提供值。

从 python.org 安装 python inerpreter(只有在 Windows 下才需要,否则你已经拥有它),以及来自http://sourceforge.net/projects/mysql-python/files/的 mysql 连接器(啊,我明白了你在 Lunux/Unix 上——然后安装 mysqldb 包)

之后,您在 python shell 中键入以下三行:

import MySQLdb
connection = MySQLdb.connect(" <hostname>", "< user>", "<pwd>", [ "<port>"] )
cursor = connection.cursor

补充一下,您可以使用cursor.execute方法发出 SQL 语句,但保留 python 的全部灵活性来更改您的数据。例如,对于这个特定的查询: myfile = open("/home/100000462733296__Stats")

for line in file:
   uid1, uid2, status = line.split("|")
   status = status.strip()
   cursor.execute("""INSERT INTO datapoints SET uid1="328383", uid2=%s, status=%s""" %(uid2, status) )

瞧!(也许在“line.split”行周围加上一个 try: 子句,以避免最后一行出现异常)

如果你还没有,你可以在一小时内通过 python.org 上的教程学习 Python——这真的很值得,即使你在计算机上做的唯一事情就是将数据导入数据库。

于 2009-11-29T22:00:25.410 回答
0

2个快速思考(一个可能适用:)):

  1. 将文件中的 uid1 的值在每一行中更改为 328383。
  2. 临时将表中的 uid1 列更改为非强制性,加载文件的内容,然后运行查询,将每行的值设置为 328383。最后,将该列重置为必填。
于 2009-11-29T21:49:27.050 回答