Python 将mysql数据导出到csv时不要将空值转换为空字符串

Python 将mysql数据导出到csv时不要将空值转换为空字符串,python,mysql,csv,pymysql,Python,Mysql,Csv,Pymysql,我使用pymysql游标将数据从mysql导出到csv,如下所示: cur=conn.cursor c=csv.writeropencsvFilePath,w,换行符=,编码='utf-8' 对于cur中的行: c、 writerowlistrow 但每当我在mysql列中遇到空值时,cursor就会在csv中写入一个空字符串。我想在csv中写入空字符串,以便在将其上载到另一个db(如redshift)时将其转换为空。在写入csv时,您可以通过select管理正确的输出,而不是重新设置空值 因此

我使用pymysql游标将数据从mysql导出到csv,如下所示:

cur=conn.cursor c=csv.writeropencsvFilePath,w,换行符=,编码='utf-8' 对于cur中的行: c、 writerowlistrow
但每当我在mysql列中遇到空值时,cursor就会在csv中写入一个空字符串。我想在csv中写入空字符串,以便在将其上载到另一个db(如redshift)时将其转换为空。

在写入csv时,您可以通过select管理正确的输出,而不是重新设置空值

因此,请尝试使用适当的select for null值

  select col1, col2, ifnull(your_possible_null_col, 'NULL'), ...
  from your_table 
  where  ... 

您还可以查看INTO OUTFILE以避免逐行管理

空字符串是唯一有意义的东西。该字段中没有任何值可供开始。另一方面,字符串`NULL`是一个实际值,包含4个字母。我可以补充一点,这可能会作为姓氏出现,导致多年来出现一些非常有趣的情况。为什么在实际上没有数据的情况下不应该发出NULL:我想区分数据中实际存在的空字符串和数据丢失的NULL值。如果有一种方法可以将数据从mysql写入csv,并将csv上载到redshift,同时在redshift中将空字符串保持为空字符串,将空值保持为null,那将非常好。无论如何,感谢您的建议。您可以使用map将None转换为具有三元运算符的替换值,例如listmaplambda x:x,如果x不是None else NULL,则为row,如图所示,您所说的话意味着您遇到了严重的问题-您没有NULL。如果pymysql返回一个空字符串,则表示该字段有一个空字符串。或者查询已将null替换为空字符串。您现在无法知道哪些值为空。。像珍妮弗Null@PanagiotisKanavos你的评论对我来说毫无意义。。试着更好地解释。。OP可能更喜欢不适用。。或者其他字符串和问题保持不变。。每个数据库都有一个用于管理空值映射的函数。我希望我们可以使用python而不是编辑sql查询来实现它。可以使用原始pymysql游标并手动将它们映射到python对象吗?除此之外,我找不到任何关于原始pymysql游标及其映射的资源:既然可以直接从查询中获得结果,为什么要逐个管理结果行。。您还应该了解一下select INTO OUFILEmy表有许多列,其中有许多可为null的列,但不确定哪些列可为null。这使得查询过于手工,很难将我的方法扩展到另一个表。在表太大以致OUTFILE命令无法耗尽内存之前,选择INTO OUTFILE是有效的。