簡體   English   中英

使用Python將多個CSV文件導入MySQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM