2009-11-29 57 views
0

我使用下面的語句從文件中的數據加載到表:有沒有在從MySQL中的文件加載數據時插入自定義數據的方法?

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); 

有什麼建議嗎?

回答

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 documentation還有更多功能支持SET功能 - 它比頁面向下多了1/2頁。

0

2快的想法(一個可能適用:)):

  1. 變化UID1的文件在每一行的值328383。
  2. 臨時將表中的uid1列更改爲非必需,加載文件的內容,然後運行將每個行中的值設置爲328383的查詢。最後,將該列重置爲強制。
1

您可以使用python交互式shell而不是MySQL shell來爲MySQL表交互提供值。

從python.org安裝python inerpreter(只有當你在windows下,否則你已經有了)和mysql連接器http://sourceforge.net/projects/mysql-python/files/(啊,我看你是在Lunux/Unix上 - 只需安裝一下然後MySQLdb的包)

之後,你鍵入這三條線在Python外殼:

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

Adter,你可以使用cursor.execute方法發出SQL語句,但保留個充分的靈活性的Python來改變你的數據。 例如,對於這個特定的查詢: MYFILE =打開( 「/家/ 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 - 即使您在計算機上做的唯一事情是將數據導入數據庫,它確實值得。

相關問題