[英]Import Multiple CSV files into MySQL with Python
我正在嘗試使用對我來說有趣/有趣的示例來學習MySQL和Python。 我對這兩者都是陌生的,因為我是貿易金融專家。 在此過程中我學到了很多東西,但是我不確定要去哪里。
我要導入的數據文件包含在一個托管的zip文件中: 此處
我提取了目錄,這里有1000多個文件。 在下面的代碼中,我只是嘗試單獨引用其中一個文件以將其解析為MySQL。
我完全知道必須有一種更簡單的方法來進行此操作,但是我正在學習,並且我確信我的代碼可以反映出這一點(您可以看到我輸入了一些基本的印刷品以查看我的代碼是正確的)。
您能提供的任何幫助將不勝感激。 本質上,當涉及到Python時,我將其視為一種愛好,也是一種在Web上獲取要使用的大量數據的方法。 我在下面粘貼了我的代碼,以便您可以查看我的來源。
抱歉,下面的代碼無法找到更好的發布方式。
下面的代碼是我的創建表腳本
> DROP TABLE IF EXISTS `nba`.`event`;
CREATE TABLE `nba`.`event` (
`a1` varchar(45) DEFAULT NULL,
`a2` varchar(45) DEFAULT NULL,
`a3` varchar(45) DEFAULT NULL,
`a4` varchar(45) DEFAULT NULL,
`a5` varchar(45) DEFAULT NULL,
`h1` varchar(45) DEFAULT NULL,
`h2` varchar(45) DEFAULT NULL,
`h3` varchar(45) DEFAULT NULL,
`h4` varchar(45) DEFAULT NULL,
`h5` varchar(45) DEFAULT NULL,
`period` int(11) DEFAULT NULL,
`time` time DEFAULT NULL,
`team` varchar(3) DEFAULT NULL,
`etype` varchar(15) DEFAULT NULL,
`assist` varchar(45) DEFAULT NULL,
`away` varchar(45) DEFAULT NULL,
`block` varchar(45) DEFAULT NULL,
`entered` varchar(45) DEFAULT NULL,
`home` varchar(45) DEFAULT NULL,
`left` varchar(45) DEFAULT NULL,
`num` int(11) DEFAULT NULL,
`opponent` varchar(45) DEFAULT NULL,
`outof` varchar(45) DEFAULT NULL,
`player` varchar(45) DEFAULT NULL,
`points` int(11) DEFAULT NULL,
`possession` varchar(45) DEFAULT NULL,
`reason` varchar(50) DEFAULT NULL,
`result` varchar(10) DEFAULT NULL,
`steal` varchar(45) DEFAULT NULL,
`type` varchar(30) DEFAULT NULL,
`x` varchar(2) DEFAULT NULL,
`y` varchar(2) DEFAULT NULL,
`gameid` varchar(15) NOT NULL,
`seqnum` int(11) NOT NULL AUTO_INCREMENT,
`updated` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`seqnum`,`gameid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Datafiles of play by play from basketballgeek.com';
這是我的python腳本。 我將上面的表格放在稱為NBA的架構中。 我設置了表格,以便為輸入到數據庫中的每個記錄創建一個序列號。 我將gameid作為字符串傳遞,並且還假定將為每個insert語句創建時間戳。 我知道有一個錯誤,但我不知道是什么錯誤。
sql = """LOAD DATA INFILE '%s' INTO TABLE event FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\\\n';""" % path print sql try: cursor.execute(sql) db.commit() except: print "ERROR" db.rollback() db.close()
為什么不使用MySQL自己的CSV導入功能?
http://dev.mysql.com/doc/refman/5.0/en/load-data.html
LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
您將要輸出實際錯誤,如下所示:
try:
cursor.execute(sql)
db.commit()
except StandardError, e:
print e
db.rollback()
例如,當我執行上面的命令時,得到以下輸出
(29, "File '/opt/mysql/data/51/test/data.csv' not found (Errcode: 2)")
請注意,您要為LOAD DATA指定LOCAL關鍵字。 沒有它,它將假設該文件位於運行MySQL服務器的計算機上,這可能與運行腳本的計算機不同嗎?
我猜您有一個類似於我的錯誤。
嘗試
LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
代替
LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
此語法是為了確保相對於客戶端而不是服務器讀取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.