【问题标题】:Using MysqlDb in python converts null to None在 python 中使用 MysqlDb 将 null 转换为 None
【发布时间】:2016-05-31 22:55:08
【问题描述】:

下面是我的代码

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"]))

它适用于没有空值的行。 当它遇到一个列的空值时,它会自动插入“无”而不是空。

如何避免插入无?

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

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

【问题讨论】:

    标签: python mysql csv mysql-python


    【解决方案1】:

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

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

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

    这可以在每次调用 str 时使用三元 if 来完成:

    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"
    )
    

    【讨论】:

    • 把这个写入一个cvs文件后,我实际上把这个数据推到了另一个数据库中。因此,如果时间戳列在 mysql 中包含 null,它会在 python 中转换为 None。当我尝试在 Redshift 中推送这些数据时,它会失败,因为 redshift 中的列需要时间戳,而 None 不是时间戳。
    • 那么,上面的代码有什么问题? 3 个 sn-ps 中的每一个都显示了如何将 None 替换为输出中的另一个值 - 如果您不想要 'null' 字符串,只需在其中添加其他内容。
    • 谢谢@jsbueno。有效。我将 "null" 替换为 " " 。我还学习了一种新的文件格式。我一直认为我们需要将每一列转换为字符串,然后将其连接起来。
    • 其实,既然你正在生成 CSV 文件,你最好使用 Python 的 CSV 模块——因为它可以自动为你处理复杂的引用。 docs.python.org/2/library/csv.html
    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2018-06-26
    • 1970-01-01
    • 2012-03-30
    相关资源
    最近更新 更多