在csv python中写入查询行

在csv python中写入查询行,python,csv,pymysql,Python,Csv,Pymysql,我正在编写一个脚本,将查询结果行写入csv文件。数据是电子邮件地址,如下所示: email1@mail.com email2@mail.com email3@mail.com 目前,我的代码将结果写入csv文件,如下所示: ('email1@mail.com'), ('email2@mail.com'), ('email3@mail.com) 如何使用下一行而不是行 编辑:我的查询似乎给了我括号中的数据,比如('email1@mail.com) 代码如下: import pymysql impo

我正在编写一个脚本,将查询结果行写入csv文件。数据是电子邮件地址,如下所示:

email1@mail.com

email2@mail.com

email3@mail.com

目前,我的代码将结果写入csv文件,如下所示:

('email1@mail.com'), ('email2@mail.com'), ('email3@mail.com)

如何使用下一行而不是行

编辑:我的查询似乎给了我括号中的数据,比如('email1@mail.com)

代码如下:

import pymysql
import csv

db = pymysql.connect(host="localhost", port=3306, user="foo", passwd="bar", db="db")
cursor = db.cursor()

query3 = """SELECT email FROM tmp"""


cursor.execute(query)

data = cursor.fetchall()
list = []

for row in data :
  value = str(row)
  list.append(value)    
  file = open('file.csv', 'wb')
  data = csv.writer(file)
  data.writerow(list)

cursor.close()
db.close()
file.close()

以下内容似乎可以解决您的问题:

f = csv.writer(open("file.csv", "w"))
for row in data:
    f.writerow([str(row)])
要获得更详细/合适的解决方案,您必须向我们提供更多详细信息,例如,您的输入格式是什么样的,以及您希望您的输出文件是什么样的(实际数据,而不是摘要“a、b、c”)

作为旁注,不要调用变量
列表
文件
。这些名称隐藏了内置列表/文件类型

编辑:如果您所做的只是每行写一个电子邮件地址,那么您并不是真正在做CSV,也不需要该模块。下面是我要做的:

f = open("file.txt", "w")
for i in email_addresses:
    f.write(i + "\n")

像pymysql这样的模块符合pythondbapi。游标的
fetchall()
方法返回元组列表。每个元组表示数据库查询中的一行。将其转换为字符串可能无法满足您的需要:

>>> str((1, ))
'(1,)'
writerow
方法需要给定一个序列,序列中的每个元素都作为行中的值输出,并根据所选格式使用适当的表示和分隔符

您可以对DB查询返回的所有行执行当前逻辑循环。每次循环都会向列表中添加另一个(可能不正确)值,打开一个文件进行写入,并写出当前列表。因为每次迭代都会创建一个新文件,所以您只能看到上一次迭代中编写的内容

下面的代码可能会满足您的需要

import csv

data = [("first",), ("second",), ("Third",)]
list = []

file = open('file.csv', 'wb')
writer = csv.writer(file)
for row in data :
    writer.writerow(row)
file.close()

太好了,它解决了我的问题!我为数据类型编辑了我的帖子。你完全正确。现在效果很好,我明白为什么了。谢谢