我创建了一个表,它有一个int类型的默认null字段。我需要使用参数查询插入数据,但我无法通过变量将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
返回“null”
不返回
返回“”
但是上面的允许在字段中插入null。
当我从mk\u int返回'null'时。。它给出类型不匹配的警告,并插入0而不是null。
1条答案
按热度按时间fnvucqvd1#
我建议使用python
None
作为绑定值。我认为这可以通过返回来实现
None
代替'NULL'
在当前代码中:我无法解释为什么那样不行。但我不是PythonMaven。
作为调试的测试,我会尝试使用
None
代替对函数的调用,这里:编辑
测试返回sql错误1604
... syntax to use near '%s'
表示发送到mysql的sql文本包含%s
占位符。所以这意味着
execute
没有绑定值。可能是因为它没有看到要绑定的值列表,它看到了
None
什么也没做。让我们尝试执行一个值列表。然后我会看到给它一些东西。我们给了它一个清单,不仅仅是
None
. 列表中的第一项是None
.让我们尝试添加paren:
如果我们能成功的话,我们可以测试一下
None
对函数的调用( Package 在parens中)。