Python - 如何插入NULL mysql值

时间:2016-04-27 18:33:05

标签: python sql

我使用带有python脚本的insert语句生成一个sql文件,但我不知道如何插入NULL值。

我有一个字典,其中键是列的名称,值是我想要插入的值。 例如:

d = {"column1":"1", "column2":"test", "column3":None}

然后我想在insert语句中使用这些值。

sqlfile.write("INSERT INTO test VALUES ('" + d["column1"] + "', '" + d["column2"] + "', '" + d["column3"] + "')")

但这会返回一个错误,因为非类型和字符串不能连接,如果我用'' NULL'它会在数据库中插入0。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您正在插入字符串 cifar10.py,而不是'NULL'值。如果这些值来自Python结构,则需要使用其他内容映射到SQL中的NULL值。

您可以使用NULL,只引用其他值:

None

请注意,因为您必须以不同方式处理def sqlquote(value): """Naive SQL quoting All values except NULL are returned as SQL strings in single quotes, with any embedded quotes doubled. """ if value is None: return 'NULL' return "'{}'".format(str(value).replace("'", "''")) sql = "INSERT INTO test VALUES ({column1}, {column2}, {column3})".format( **{k: sqlquote(v) for k, v in d.items()}) ,所以您还必须处理正确的SQL引用!如果您的任何值直接或间接来自用户提供的数据,那么您将打开SQL注入攻击。

以上None函数应该足以满足标准SQL引用规则的SQLite strings。不同的数据库对此有不同的规则,因此检查您的文档

就个人而言,我会使用SQLAlchemy library来生成SQL并让 it 为您处理引用。您可以将其配置为为不同的数据库引擎生成SQL。