Mat*_*ode 33 python mysql csv mariadb pymysql
我有以下内容:
import MySQLdb as dbapi
import sys
import csv
dbServer='localhost'
dbPass='supersecretpassword'
dbSchema='dbTest'
dbUser='root'
dbQuery='SELECT * FROM pbTest.Orders;'
db=dbapi.connect(host=dbServer,user=dbUser,passwd=dbPass)
cur=db.cursor()
cur.execute(dbQuery)
result=cur.fetchall()
c = csv.writer(open("temp.csv","wb"))
c.writerow(result)
Run Code Online (Sandbox Code Playgroud)
这会产生乱码.我熟悉使用打印记录[0]等.不知道我应该如何设置格式.产生类似查询在控制台中的内容.我不能从mysql服务器做一个简单的INTO OUTFILE.
jwh*_*hat 29
您可以将所有结果转储到csv文件而不循环:
rows = cursor.fetchall()
fp = open('/tmp/file.csv', 'w')
myFile = csv.writer(fp)
myFile.writerows(rows)
fp.close()
Run Code Online (Sandbox Code Playgroud)
Dan*_*man 18
result是一个行列表.因此,您需要遍历该列表并编写每一行:
for row in result:
c.writerow(row)
Run Code Online (Sandbox Code Playgroud)
Mws*_*cer 14
为遇到此问题的任何人回答列标题名称:(我正在使用 Jwhat 的方法写入 csv)
result = cur.fetchall()
#Getting Field Header names
column_names = [i[0] for i in cur.description]
fp = open('Result_Set.csv' 'w')
myFile = csv.writer(fp, lineterminator = '\n') #use lineterminator for windows
myFile.writerow(column_names)
myFile.writerows(result)
fp.close()
Run Code Online (Sandbox Code Playgroud)
以前的答案会出错。必须首先将标题写入文件,然后添加行。以下对我有用。
rows = cursor.fetchall()
headers = [col[0] for col in cursor.description] # get headers
rows = (tuple(headers),) + rows # add headers to rows
fp = open('/tmp/file.csv', 'w')
myFile = csv.writer(fp)
myFile.writerow(headers)
myFile.writerows(rows)
fp.close()
Run Code Online (Sandbox Code Playgroud)
我对Python知之甚少,但是经过一番谷歌搜索后,您是否应该使用写入多行的writerows(带有S),而不是需要单行的writerow。
正如我所说,这对我来说有点像在黑暗中刺伤。
| 归档时间: |
|
| 查看次数: |
49906 次 |
| 最近记录: |