以下是我的代码
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。
如何避免插入无?
空列的数据类型可以是时间戳或字符串。
以前有人遇到过这样的问题吗?
答案 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"
)