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

时间:2016-02-19 11:21:57

标签: 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_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。

如何避免插入无?

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

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

1 个答案:

答案 0 :(得分:0)

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

你面临的问题是你需要一个" SQLish"文本输出程序。在普通代码中,None是一个更合适的值,并且正确表示SQL" Null"用Python术语。

然而,None的str表示是" None" - 如果你想要Null,上面代码中最简单的解决办法就是在你将值赋予str的地方写一个表达式,这样如果值为“无”,它就会得到字符串' null'代替。

可以在每次调用if时使用三元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与" +" :

fileOpen.write("{},{}".format(
    each["A"] if each["A"] is not None else "null",
    each["B"] if each["B"] is not None else "null",
)

或者,如果您的值永远不是空字符串或数字0,则可以使用or运算符快捷键而不是三元if

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