PL/Python。如何使用 None type at where 子句作为整数?
PL/Python. How to use None type at where clouse for integer?
所以,我有一个与下面相同的查询:
query = plpy.prepare(
"SELECT count(id) FROM contracts WHERE dependent_id = ",
["integer"])
params = [dependent_id]
plpy.execute(query, params)
如果我的字段 dependent_id
不是 None
,则效果很好。
但是,如果我在此字段中有一个 None
,则查询工作不正确。
因为当你与 NULL
比较时,=
与 IS
不同
我尝试使用 if-else 表达式来更正我的查询字符串,但是当查询包含 IS
时,我发现语法异常。
在我使用 IS
关键字记录查询后(当我的字段是 None
时),我在 PSQL shell 中执行了它,它工作得很好。
那么,为什么 IS
在 plpythonu
存储过程中不起作用,但在本机 SQL 查询中仍然有效?
更新:
我在工作中与 DBA 进行了讨论,他认为这是 plpythonu
中类型转换的错误。因为 plpy.execute
当我们尝试将 IS
与整数类型一起使用时出现异常。
将字段声明为整数并在准备步骤的查询中使用 IS
后,您将在执行步骤中遇到语法异常。
解决方法是查询字符串,其中明显指示您的 None
字段为 IS NULL
或 IS NOT NULL
P.S。对不起我的英语。
您可以尝试准备两个单独的 SQL 语句来处理 Python 的动态类型:
query = plpy.prepare("SELECT count(id) FROM contracts WHERE dependent_id = ", ["integer"]) if dependant_id is not None else plpy.prepare("SELECT count(id) FROM contracts WHERE dependent_id IS NULL", [])
if dependant_id is None:
plpy.execute(query, [])
else:
plpy.execute(query, [dependant_id])
所以,我有一个与下面相同的查询:
query = plpy.prepare(
"SELECT count(id) FROM contracts WHERE dependent_id = ",
["integer"])
params = [dependent_id]
plpy.execute(query, params)
如果我的字段 dependent_id
不是 None
,则效果很好。
但是,如果我在此字段中有一个 None
,则查询工作不正确。
因为当你与 NULL
=
与 IS
不同
我尝试使用 if-else 表达式来更正我的查询字符串,但是当查询包含 IS
时,我发现语法异常。
在我使用 IS
关键字记录查询后(当我的字段是 None
时),我在 PSQL shell 中执行了它,它工作得很好。
那么,为什么 IS
在 plpythonu
存储过程中不起作用,但在本机 SQL 查询中仍然有效?
更新:
我在工作中与 DBA 进行了讨论,他认为这是 plpythonu
中类型转换的错误。因为 plpy.execute
当我们尝试将 IS
与整数类型一起使用时出现异常。
将字段声明为整数并在准备步骤的查询中使用 IS
后,您将在执行步骤中遇到语法异常。
解决方法是查询字符串,其中明显指示您的 None
字段为 IS NULL
或 IS NOT NULL
P.S。对不起我的英语。
您可以尝试准备两个单独的 SQL 语句来处理 Python 的动态类型:
query = plpy.prepare("SELECT count(id) FROM contracts WHERE dependent_id = ", ["integer"]) if dependant_id is not None else plpy.prepare("SELECT count(id) FROM contracts WHERE dependent_id IS NULL", [])
if dependant_id is None:
plpy.execute(query, [])
else:
plpy.execute(query, [dependant_id])