使用python将mysql查询写入csv,需要显示字段名称

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)

  • 这很好用,但无论如何我还可以获得字段名称/列名称. (2认同)

Dan*_*man 18

result是一个行列表.因此,您需要遍历该列表并编写每一行:

for row in result:
    c.writerow(row)
Run Code Online (Sandbox Code Playgroud)

  • @teatime - 您可以从`result [0] .keys`(或等效的`row.keys`)获取字段名. (4认同)
  • 不幸的是,这个答案并没有完全回答问题的标题("需要显示字段名称").@ mtrw的注释有帮助,但不适用于给定的代码(元组对象没有属性'keys').如果游标是字典游标,即使用`dbconn.cursor(dictionary = True)`创建,则它可能适用. (2认同)

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)


Geo*_*e B 6

以前的答案会出错。必须首先将标题写入文件,然后添加行。以下对我有用。

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)


Jay*_*dee 1

我对Python知之甚少,但是经过一番谷歌搜索后,您是否应该使用写入多行的writerows(带有S),而不是需要单行的writerow。

正如我所说,这对我来说有点像在黑暗中刺伤。