pymysql | 将 NULL 插入 nulable int 字段



我创建了一个表,其中包含一个默认的 NULL 字段,类型为 int。我需要使用参数查询插入数据,但我无法通过变量将 NULL 传递到 int 字段中。

import sys
import os
import datetime
import logging
import rds_config
import pymysql
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5,  sql_mode="")
def mk_int (value):
if value in (None, "",''):
return 'NULL'
else:
return int(value)
blankStrOfInt = ''
insertSQL   = "INSERT INTO `patientinsight`.`Employee`(`id`,`LastName`,`FirstName`, `DepartmentCode`) VALUES (6, 'Doe', 'John', %s)"
conn.cursor().execute(insertSQL,mk_int(blankStrOfInt))
conn.commit()

我已经尝试了以下内容作为从mk_int返回

  • 返回空
  • 返回"空"
  • 返回 无
  • 返回 ''

但是上述允许将 NULL 插入到字段中。

  • 当我从mk_int返回"NULL"时,它会给出类型不匹配的警告并插入 0 而不是 NULL。

我建议使用PythonNone作为绑定值。

我认为这可以通过返回None来代替当前代码中的'NULL'来实现,如下所示:

if value in (None, "",''):
return None

我无法解释为什么这行不通。但我不是Python专家。

作为调试的测试,我会尝试使用None代替对函数的调用,如下所示:

conn.cursor().execute(insertSQL,None)

编辑

测试返回 SQL 错误 1604... syntax to use near '%s'

这表示发送到MySQL的SQL文本包含%s占位符。

所以这意味着execute没有绑定值。

可能是因为它没有看到要绑定的值列表,它看到了None并且没有做任何事情。

让我们尝试给执行一个值列表。然后执行将看到它给了它一些东西。我们给了它一个清单,而不仅仅是None.列表中的第一项是None.

让我们尝试添加参数:

conn.cursor().execute(insertSQL, ( None ) )
^      ^

如果我们让它工作,那么我们可以测试用对函数的调用(包装在 parens( 中替换None

相关内容

  • 没有找到相关文章