首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用python将mysql查询写到csv,需要显示字段名

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

Stack Overflow用户
提问于 2011-01-06 17:31:16
回答 7查看 76.5K关注 0票数 43

我有以下几点:

代码语言:javascript
复制
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)

这会产生乱七八糟的东西。我熟悉使用打印记录等。不确定我应该如何去设置格式。来产生类似于控制台中的查询的东西。我不能从mysql服务器执行简单的INTO OUTFILE。

更新

8年过去了,我仍然偶尔会收到关于这个问题的更新或询问。

正如一些注释中所述,来自DBAPI的cursor.description就是我要查找的内容。

下面是一个在Python3中使用pymysql驱动程序连接到MariaDB的更现代的示例,它将选择所有行并将其提取到一个元组中,将行标题/描述提取到一个列表中。然后,我将这两个数据结构合并为一个列表,即written to a csv file

标题名称是结果列表中的第一个条目;以线性方式将结果写入文件可确保行标题是CSV文件中的第一行。

代码语言:javascript
复制
import pymysql
import csv
import sys

db_opts = {
    'user': 'A',
    'password': 'C',
    'host': 'C',
    'database': 'D'
}

db = pymysql.connect(**db_opts)
cur = db.cursor()

sql = 'SELECT * from schema_name.table_name where id=123'
csv_file_path = '/tmp/my_csv_file.csv'

try:
    cur.execute(sql)
    rows = cur.fetchall()
finally:
    db.close()

# Continue only if there are rows returned.
if rows:
    # New empty list called 'result'. This will be written to a file.
    result = list()

    # The row name is the first entry for each entity in the description tuple.
    column_names = list()
    for i in cur.description:
        column_names.append(i[0])

    result.append(column_names)
    for row in rows:
        result.append(row)

    # Write result to file.
    with open(csv_file_path, 'w', newline='') as csvfile:
        csvwriter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        for row in result:
            csvwriter.writerow(row)
else:
    sys.exit("No rows found for query: {}".format(sql))
EN

回答 7

Stack Overflow用户

发布于 2012-07-31 00:51:05

您可以将所有结果转储到csv文件中,而无需循环:

代码语言:javascript
复制
rows = cursor.fetchall()
fp = open('/tmp/file.csv', 'w')
myFile = csv.writer(fp)
myFile.writerows(rows)
fp.close()
票数 36
EN

Stack Overflow用户

发布于 2011-01-06 18:45:57

result是行的列表。因此,您需要遍历该列表并写入每一行:

代码语言:javascript
复制
for row in result:
    c.writerow(row)
票数 18
EN

Stack Overflow用户

发布于 2017-12-15 06:21:00

对于遇到这种情况的任何人,请使用列标题名称进行回答:(我使用Jwhat的方法来写入csv)

代码语言:javascript
复制
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()
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4613465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档