我创建了一个表,它有一个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。
我建议使用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)?我尝试了以下操作,但可以理解的是语法错误: 问题答案: