PyMySQL 插入 NULL 或字符串

Posted

技术标签:

【中文标题】PyMySQL 插入 NULL 或字符串【英文标题】:PyMySQL Insert NULL or a String 【发布时间】:2015-04-26 05:58:10 【问题描述】:

我尝试使用 Pymysql 插入一个字段 (title),它可以是 NULL 或字符串。但它不起作用。

query = """
    INSERT INTO `chapter` (title, chapter, volume)
    VALUES ("%s", "%s", %d)
"""

cur.execute(query % (None, "001", 1))
cur.execute(query % ("Title", "001", 1))

此代码将None 插入到数据库中。如果我删除第一个 %s 周围的双引号,则会引发错误:

pymysql.err.InternalError: (1054, "Unknown column 'None' in 'field list'")

如何插入 NULL?

【问题讨论】:

【参考方案1】:

1) 切勿对 SQL 使用字符串格式。

2) 尝试以下操作:

query = """
INSERT INTO `chapter` (title, chapter, volume)
VALUES (%s, %s, %s)
"""
cur.execute(query, (None, "001", 1))

【讨论】:

太棒了!现在没事了。非常感谢! 你说“从不使用 sql 的字符串格式”是什么意思?我是一个mysql初学者,做一些类似于OP的事情。 @ScheissSchiesser,可能会导致sql注入。所以最好使用上面代码示例中的参数绑定 如果你希望None 出现在数字列中,比如上面的volume 哦...我已经为 SQL 使用字符串格式很长一段时间了...我认为只要我使用 bleach 模块到 bleach.clean 任何输入就可以了.有错吗?

以上是关于PyMySQL 插入 NULL 或字符串的主要内容,如果未能解决你的问题,请参考以下文章

pymysql中如何将动态的插入数据库中

MySQL,最好插入 NULL 或空字符串?

PostgreSQL - 我有啥办法可以定义一个在插入或更新时将空字符串转换为 null 的列?

python3 插入 mysql 时内容带有特殊字符处理

Python使用pyMysql模块插入数据到mysql的乱码解决

MySQL 中NULL和空值的区别