Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PL/Python。如何在clouse for integer的位置使用None类型?_Python_Postgresql_Plpython - Fatal编程技术网

PL/Python。如何在clouse for integer的位置使用None类型?

PL/Python。如何在clouse for integer的位置使用None类型?,python,postgresql,plpython,Python,Postgresql,Plpython,因此,我有一个查询,如下所示: query = plpy.prepare( "SELECT count(id) FROM contracts WHERE dependent_id = $1", ["integer"]) params = [dependent_id] plpy.execute(query, params) 如果我的字段相关_id不是None,那么它工作得很好。 但是,如果我在这个字段中没有,则查询得到的工作是不正确

因此,我有一个查询,如下所示:

query = plpy.prepare(
    "SELECT count(id) FROM contracts WHERE dependent_id = $1",  
    ["integer"])

params = [dependent_id]

plpy.execute(query, params)
如果我的字段相关_id不是None,那么它工作得很好。 但是,如果我在这个字段中没有,则查询得到的工作是不正确的。 因为=与NULL比较时不相同

我试图使用if-else表达式来更正我的查询字符串,但当查询包含IS时,我捕获了语法异常

当我的字段为None时,我用IS关键字记录了我的查询之后,我在一个PSQL shell中执行了它,它工作得很好

那么,为什么IS在plpythonu存储过程中不起作用,但在本机SQL查询中仍然起作用呢

更新: 我在工作中与DBA讨论过,他认为这是plpythonu中类型转换的错误。因为当我们尝试使用整数类型时,plpy.execute异常

将字段声明为整数并在准备步骤的查询中使用IS后,在执行步骤中将出现语法异常

解决方法是查询字符串,并明显指示“无”字段为空或不为空


顺便说一句,我的英语很抱歉。

您可以尝试准备两个单独的SQL语句来处理Python的动态类型:

query = plpy.prepare("SELECT count(id) FROM contracts WHERE dependent_id = $1",  ["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])

您可以使用smth like和cv作为值1,null从c中选择*当v为null时,v为null当v为非null时,v=1结束;对于这样的情况,或极端选项,打开转换_null_equals so null=null将是真的。也请张贴代码,以及工作-否则我们如何回答为什么这个答案是对我有用。但在更简单的结构中。如果依赖项id为None-else=$1,则query.format为NULL