2013-03-04 243 views
1

MySQL數據庫這是我的代碼:導入CSV文件導入使用python

#!/usr/bin/python 
import MySQLdb 
import csv 

db = MySQLdb.connect(host="host", # The Host 
        user="username", # username 
        passwd="pwd", # password 
        db="databasename") # name of the data base 

sqlLoadData = 'LOAD DATA LOCAL INFILE "csv?_file_name.csv" INTO TABLE tablename ' 
sqlLoadData += 'FIELDS TERMINATED BY "," LINES TERMINATED BY "\n"'  
sqlLoadData += 'IGNORE 1 LINES'  
sqlLoadData += 'ENCLOSED BY '"' ESCAPED BY "\\" ' 

try: 
    curs = db.cursor() 
    curs.execute(sqlLoadData)  
    resultSet = curs.fetchall()  
except StandardError, e:  
    print e  
    db.rollback() 
    db.close() 

我收到錯誤消息:您的SQL語法錯誤; chekc與您的Mysql Server對應的手冊。

當我刪除部分sqlLoadData += 'ENCLOSED BY '"' ESCAPED BY "\\" '一切工作完美。我使用最後一部分來刪除值的引用。

我也嘗試:

光標= mydb.cursor()

讀者= csv.reader(開放( 'Cumulative.csv', 'RB'))

閱讀器。下一個()用於閱讀器中的行[1:]: cursor.execute('INSERT INTO Cumulative(C1,C2,C3,C4,C5,C6)VALUES(%s,%s,%s,%s,%s ,%s)',行)
cursor.commit()

關閉與數據庫的連接。

cursor.close()

我只想刪除該帖這樣的整數字段將支持數據。所以與報價「1」將被視爲一個字符串,而不是整數

任何人都可以請幫我理解這一點嗎?

謝謝!

回答

3

看起來像你忘了用空格或換行符結束上一行。當解析器嘗試瞭解明顯不是關鍵字的LINESENCLOSED時,會導致語法錯誤。

sqlLoadData += 'IGNORE 1 LINES \n' 
sqlLoadData += ''ENCLOSED BY '"' ESCAPED BY "\" '' 

作爲一個經驗法則:當你調試,你是能夠解決你的代碼通過刪除線,不排除線正上方

編輯:修改了第二行附近的引號。我認爲這是在「封閉」聲明中的突破。

+0

這固定的MySQL查詢,但是這給了我行繼續符{'} – mongotop 2013-03-04 21:53:00

+0

做了更改後的錯誤意外的字符, 現在就試試。 (用一整套單引號封裝整個字符串) – 2013-03-04 22:25:19

+0

非常感謝您的快速重播!還是一樣的錯誤消息。 – mongotop 2013-03-04 22:41:59

3

2天后身價的研究,我找到了答案:

!/usr/bin/python 
import MySQLdb 
import csv 

db = MySQLdb.connect(host="host", # The Host 
         user="username", # username 
         passwd="pwd", # password 
         db="databasename") # name of the data base 

cursor = connection.cursor() 
Query = """ LOAD DATA LOCAL INFILE 'usrl to csv file' INTO TABLE 
table_nameFIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED 
BY '"' Lines terminated by '\n' IGNORE 1 LINES """ 

cursor.execute(Query) 
connection.commit() 
cursor.close() 

希望它會幫助別人那裏。

+0

如果你解釋錯誤發生的原因以及你如何解決它,這將是很好的。 – jurgenreza 2013-03-05 18:12:36

+2

我可以解釋錯誤,如果你想。他解決了這個錯誤,把他的所有文本都用三個引號括起來,而不是用peicewise來構建,這真的好多了。他原來的錯誤,我也錯過了,他只是用空格字符終止了他的第一和第四行,但他的第二和第三行也需要它們。我認爲他的第二行最後有一個新的行字符,但它實際上只是在命令「lines terminated by」命令中包含了一個新的行字符。 – 2013-03-05 19:23:54

+1

不要接受任何答案,贊成嗎? – hd1 2013-11-04 19:00:39

1

經過幾天和幾個小時的搜索互聯網和運行到各種錯誤和警告,這工作完美。我希望這可以節省有人一段時間

import MySQLdb 
import os 
import string 

db = MySQLdb.connect (host="host", 
    user="user", 
    passwd="pwd", 
    db="database_name", 
    local_infile = 1) #Grants permission to write to db from an input file. Without this you get sql Error: (1148, 'The used command is not allowed with this MySQL version') 

print "\nConnection to DB established\n" 

#The statement 'IGNORE 1 LINES' below makes the Python script ignore first line on csv file 
#You can execute the sql below on the mysql bash to test if it works 
sqlLoadData = """load data local infile 'file.csv' into table table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;""" 

try: 
    curs = db.cursor() 
    curs.execute(sqlLoadData) 
    db.commit() 
    print "SQL execution complete" 
    resultSet = curs.fetchall() 
except StandardError, e:  
    print "Error incurred: ", e  
    db.rollback() 
    db.close() 

print "Data loading complete.\n" 

謝謝,我希望這有助於:)