Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用MysqlDb将null转换为None_Python_Mysql_Csv_Mysql Python - Fatal编程技术网

在python中使用MysqlDb将null转换为None

在python中使用MysqlDb将null转换为None,python,mysql,csv,mysql-python,Python,Mysql,Csv,Mysql Python,下面是我的代码 import MysqlDB as mob Mysqlconn = mdb.connect(hostname, username, password, databasename,port=3306,cursorclass=mdb.cursors.DictCursor) Mysqlcur = self.Mysqlcon.cursor() Mysqlcur.execute("Select * from users where date = %(date_check)s,{"date

下面是我的代码

import MysqlDB as mob

Mysqlconn = mdb.connect(hostname, username, password, databasename,port=3306,cursorclass=mdb.cursors.DictCursor)
Mysqlcur = self.Mysqlcon.cursor()
Mysqlcur.execute("Select * from users where date = %(date_check)s,{"date_check":current_date})
row = self.Mysqlcur.fetchall()
fileOpen = open("filename.csv","w")
for each in row:
    fileOpen.write(str(each["A"])+","+str(each["B"]))
对于没有空值的行,它可以正常工作。 当遇到列的null值时,它会自动插入“None”而不是null

如何避免插入“无”

空列的数据类型可以是时间戳或字符串


以前有人遇到过这样的问题吗?

Python中的SQL连接器将始终自动从DB中的本机值转换为适当的Python类型。这不会只发生在MySQL上

您面临的问题是由于您希望从程序中输出“SQLish”文本。在普通代码中,None是一个更合适的值,是SQL“Null”在Python术语中的正确表示

但是,None的str表示形式是“None”-如果您希望为Null,那么在上面的代码中最简单的解决方法是在您将值添加到
str
的位置上编写一个表达式,这样,如果值为“None”,它将得到字符串“Null”

如果在对
str
的每次调用中
三元
可以做到这一点:

fileOpen.write(str(each["A"] if each["A"] is not None else "null")+","+str(each["B"] if each["B"] is not None else "null"))
当然,您应该希望使用字符串格式化,即用“+”连接字符串的isnetad:

或者,如果您的值从来不是空字符串或数字0,则可以使用
运算符快捷方式,而不是三元
if

fileOpen.write("{},{}".format(
    each["A"] or "null", 
    each["B"] or "null"
)

Python中的SQL连接器将始终自动从DB中的本机值转换为适当的Python类型。这不会只发生在MySQL上

您面临的问题是由于您希望从程序中输出“SQLish”文本。在普通代码中,None是一个更合适的值,是SQL“Null”在Python术语中的正确表示

但是,None的str表示形式是“None”-如果您希望为Null,那么在上面的代码中最简单的解决方法是在您将值添加到
str
的位置上编写一个表达式,这样,如果值为“None”,它将得到字符串“Null”

如果在对
str
的每次调用中
三元
可以做到这一点:

fileOpen.write(str(each["A"] if each["A"] is not None else "null")+","+str(each["B"] if each["B"] is not None else "null"))
当然,您应该希望使用字符串格式化,即用“+”连接字符串的isnetad:

或者,如果您的值从来不是空字符串或数字0,则可以使用
运算符快捷方式,而不是三元
if

fileOpen.write("{},{}".format(
    each["A"] or "null", 
    each["B"] or "null"
)

在将其写入cvs文件后,我实际上将该数据推送到另一个数据库中。因此,如果mysql中的timestamp列包含null,则在python中将其转换为None。当我尝试在Redshift中推送这个数据时,它失败了,因为Redshift中的列需要timestamp,而None不是timestamp。那么,上面的代码有什么问题?这三个代码片段中的每一个都展示了如何用输出中的另一个值替换None-如果不需要“null”字符串,只需在其中添加其他内容即可。谢谢@jsbueno。成功了。我将“null”替换为“”。我还学习了一种新的文件格式。我一直认为我们需要将每一列转换为字符串,然后对其进行concat。实际上,既然您正在生成CSV文件,您最好使用Python的CSV模块,因为它可以自动为您处理复杂的报价。在将其写入cvs文件后,我实际上将该数据推送到另一个数据库中。因此,如果mysql中的timestamp列包含null,则在python中将其转换为None。当我尝试在Redshift中推送这个数据时,它失败了,因为Redshift中的列需要timestamp,而None不是timestamp。那么,上面的代码有什么问题?这三个代码片段中的每一个都展示了如何用输出中的另一个值替换None-如果不需要“null”字符串,只需在其中添加其他内容即可。谢谢@jsbueno。成功了。我将“null”替换为“”。我还学习了一种新的文件格式。我一直认为我们需要将每一列转换为字符串,然后对其进行concat。实际上,既然您正在生成CSV文件,您最好使用Python的CSV模块,因为它可以自动为您处理复杂的报价。