You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用csv.writer写入MySQL结果时,如何去除整行的多余引号包裹?

解决Python csv.writer写入MySQL结果时整行被引号包裹的问题

问题原因

你遇到的情况是因为fetchall()返回的每一行不是多元素的序列(元组/列表),而是一个包含逗号分隔内容的单个字符串。csv.writer会把这个单个字符串当成一个CSV字段,为了保留字段内的逗号,自动用引号包裹整行。

解决方法

方法一:修正MySQL Cursor的返回格式

确保你的MySQL游标使用默认返回类型,即每行返回一个包含多个字段的元组。如果之前修改过cursorclass参数(比如设置成返回字符串的类型),改回默认即可:

# 初始化游标时使用默认配置,不设置特殊cursorclass
source_mysql_cursor = connection.cursor()

此时fetchall()会返回类似(('item1', 'item2', 'item3'), ...)的结构,直接用writerows(result_set)就能生成正确的CSV格式。

方法二:手动拆分每行字符串

如果无法修改游标返回格式,或者查询结果本身就是拼接好的字符串,需要手动拆分每行内容:

import csv

datafile = csv.writer(open(filename, 'a', newline=''))
result_set = source_mysql_cursor.fetchall()

for row in result_set:
    # 假设每行是元组内的单个字符串,例如row为("item1,item2,item3",)
    split_fields = row[0].split(',')
    datafile.writerow(split_fields)

方法三:强制关闭CSV引号(慎用)

如果你的字段内容里没有逗号、引号等特殊字符,可以通过设置csv.writer的quoting参数强制关闭引号包裹,但仅适合场景简单的情况:

import csv

datafile = csv.writer(open(filename, 'a', newline=''), quoting=csv.QUOTE_NONE, escapechar='')
result_set = source_mysql_cursor.fetchall()
datafile.writerows(result_set)

注意:如果字段内存在特殊字符,这种方法会导致CSV格式错误。


内容的提问来源于stack exchange,提问作者Pythonist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:01:16