pymysql |在nulable int字段中插入null

qnakjoqk  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(565)

我创建了一个表,它有一个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。

fnvucqvd

fnvucqvd1#

我建议使用python None 作为绑定值。
我认为这可以通过返回来实现 None 代替 'NULL' 在当前代码中:

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

我无法解释为什么那样不行。但我不是PythonMaven。
作为调试的测试,我会尝试使用 None 代替对函数的调用,这里:

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

编辑
测试返回sql错误1604 ... syntax to use near '%s' 表示发送到mysql的sql文本包含 %s 占位符。
所以这意味着 execute 没有绑定值。
可能是因为它没有看到要绑定的值列表,它看到了 None 什么也没做。
让我们尝试执行一个值列表。然后我会看到给它一些东西。我们给了它一个清单,不仅仅是 None . 列表中的第一项是 None .
让我们尝试添加paren:

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

如果我们能成功的话,我们可以测试一下 None 对函数的调用( Package 在parens中)。

相关问题