2015-12-04 58 views
0

我需要一個python腳本來從我的數據庫XXXX生成一個csv文件。我寫thise劇本,但我有一些錯誤:使用csv從mysql數據庫導出數據

import mysql.connector 
import csv 
filename=open('test.csv','wb') 
c=csv.writer(filename) 

cnx = mysql.connector.connect(user='XXXXXXX', password='XXXXX', 
           host='localhost', 
           database='XXXXX') 


cursor = cnx.cursor() 

query = ("SELECT `Id_Vendeur`, `Nom`, `Prenom`, `email`, `Num_magasin`, `Nom_de_magasin`, `Identifiant_Filiale`, `Groupe_DV`, `drt_Cartes`.`gain` as 'gain', `Date_Distribution`, `Status_Grattage`, `Date_Grattage` FROM `drt_Cartes_Distribuer`,`drt_Agent`,`drt_Magasin`,`drt_Cartes` where `drt_Cartes_Distribuer`.`Id_Vendeur` = `drt_Agent`.`id_agent` AND `Num_magasin` = `drt_Magasin`.`Numero_de_magasin` AND `drt_Cartes_Distribuer`.`Id_Carte` = `drt_Cartes`.`num_carte`") 

cursor.execute(query) 

for Id_Vendeur, Nom, Prenom, email, Num_magasin, Nom_de_magasin, Identifiant_Filiale, Groupe_DV, gain, Date_Distribution, Status_Grattage, Date_Grattage in cursor: 
    c.writerow([Id_Vendeur, Nom, Prenom, email, Num_magasin, Nom_de_magasin, Identifiant_Filiale, Groupe_DV, gain, Date_Distribution, Status_Grattage, Date_Grattage]) 

cursor.close() 
filename.close() 
cnx.close() 
當我執行命令的phpMyAdmin的它的外觀做工非常好,但是從我的殼我得到thise消息

# python test.py 
Traceback (most recent call last): 
    File "test.py", line 18, in <module> 
    c.writerow([Id_Vendeur, Nom, Prenom, email, Num_magasin, Nom_de_magasin, Identifiant_Filiale, Groupe_DV, gain, Date_Distribution, Status_Grattage, Date_Grattage]) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xeb' in position 5: ordinal not in range(128) 
+0

'\ xeb'是',非ASCII。我想你在管道時會出錯。在這種情況下,請參閱https://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python。 – 4ae1e1

+0

如果您可以訪問mysql服務器(ssh?),則可以將數據庫轉儲爲CSV(http://stackoverflow.com/a/12041241/1162467)。 此外,如果您複製表格並將引擎設置爲CSV,則您的所有數據庫表格都只有CSV格式,您可以直接使用這些表格!您只需要截斷每個表格並在每次需要更新的CSV時重新插入數據。 –

回答

0

看起來你正在使用Python 2.7的csv。 Quoting docs

注意此版本的csv模塊不支持Unicode輸入。此外,目前有關於ASCII NUL字符的一些問題。因此,所有輸入應該是UTF-8或可打印的ASCII,以確保安全;請參閱示例部分中的示例。

選項,選擇其中的一種:

  1. 按照文檔的鏈接,進入樣品部分,accordantly修改代碼。
  2. 使用Unicode的supprt一個CSV包像https://pypi.python.org/pypi/unicodecsv