所以,我有一个与以下相同的查询:
query = plpy.prepare(
"SELECT count(id) FROM contracts WHERE dependent_id = $1",
["integer"])
params = [dependent_id]
plpy.execute(query, params)
如果我的领域dependent_id
不是None
,它运作良好。但是,如果我None
在这个领域有一个,查询就会不正确。因为与你比较时=
不一样IS
NULL
我尝试使用 if-else 表达式来更正我的查询字符串,但是当查询包含 时IS
,我捕获了语法异常。
在我用IS
关键字(当我的字段是None
)记录我的查询后,我在 PSQL shell 中执行了它,它运行良好。
那么,为什么IS
不能在plpythonu
存储过程中工作,但仍然可以在本机 SQL 查询中工作呢?
更新:
我在工作中与 DBA 进行了讨论,他认为这是plpythonu
类型转换的错误。因为plpy.execute
当我们尝试使用IS
整数类型时会出现异常。
在您将字段声明为整数并IS
在准备步骤中用于查询后,您将在执行步骤中获得语法异常。
解决方法是查询字符串,其中明显指示您的None
字段为IS NULL
或IS NOT NULL
PS对不起我的英语。