当前位置: 首页 > 知识库问答 >
问题:

pymysql |将NULL插入nulable int字段

谭锐藻
2023-03-14

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

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

共有1个答案

雷飞虎
2023-03-14

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

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

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

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

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

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

编辑

测试返回SQL错误1604...语法使用接近'%s'

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

这意味着执行没有对值进行绑定。

可能是因为它没有看到要绑定的值列表,所以它看到了None,什么也没做。

让我们试着给执行一个值的列表。然后执行会看到它给了它一些东西。我们给了它一个列表,而不仅仅是<代码>无。列表中的第一项是<代码>无。

让我们尝试添加参数:

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

如果我们能做到这一点,那么我们可以测试用对函数的调用(用括号包装)替换

 类似资料:
  • Hy, 我为数据库创建了以下3个表: ); 我有以下存储过程 C#代码: 但在我将数据插入使用上述代码的表单后,我得到了以下错误: 无法将值NULL插入列User_Id...... PLATFORM. MDF. dbo. Buyer;列不允许空值。INSERT失败。 无法将值NULL插入列Type_Id,表... PLATFORM. MDF. dbo. User;列不允许空值。INSERT失败。

  • 这是我的插入代码,后面是创建表的代码 我不想插入任何东西到列占用,我不知道为什么这是发生的或如何修复它。我只想在tblGrave(GraveName)中插入值。任何帮助都会很好。

  • 原因:com。微软sqlserver。jdbc。SQLServerException:无法将值NULL插入表ECM3的“白色列表”列中。dbo。白名单;列不允许空值。插入失败。 我已经为我的问题做了很多搜索,我尝试了所有可能的解决方案,但都不起作用。我试图使用关系为的父表(白名单)插入子表(白名单匹配),但它显示了前面的错误! 白名单。java(父级) WhiteListMatches.java(

  • 问题内容: 我正在尝试像这样从C#向我的数据库中插入一个空值: DBNull.Value是日期可以在的地方,但我希望它等于null,但它似乎将默认日期设置为1900 … 问题答案: 改成: 返回空字符串,但您希望改为null。 但是,这种构建查询的方式可能会导致问题。例如,如果您的字符串之一包含引号’,则结果查询将引发错误。更好的方法是使用参数并在SqlCommand对象上进行设置:

  • PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,支持兼容 Python 3,用于代替 MySQLdb。 注意:PyMySQL 不支持 _mysql 提供的低级AP I,如data_seek、store_result和use_result。用户应该使用PEP 249中定义的高级 API。但是一些API,比如 autocommit 和 ping,因为 PEP 249 没有涵盖它们的用例,所以支持。

  • 问题内容: 我有一个表,其中有一个带有默认值的列: 有一个存储过程插入到: 您可以看到,我必须有条件地分支以便我的插入使用默认值(如果为null)。仅一列就可以了,但是请考虑是否有更多列-语法可能很笨拙。 我是否可以使用一种语法来指定插入值应该返回默认值(如果为null)?我尝试了以下操作,但可以理解的是语法错误: 问题答案: