在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模块,因为它可以自动为您处理复杂的报价。