如何在plpython查询中检查值是否返回?

时间:2017-03-28 11:42:40

标签: python sql postgresql

我在PostgreSQL函数的false with that image name中有这个赋值:

true

查询可以返回1个文本结果,也可以不返回任何内容。

问题在于,如果查询没有返回任何内容,plpythonu条件仍为result=plpy.execute("select value from table where doctitle like '%%%s%%'"%projectname) if result: final = result[0]["value"] (因为它包含值列),我希望仅result:的分配发生如果值列中有实际值。我该如何检查?

1 个答案:

答案 0 :(得分:1)

结果对象模拟列表或字典对象。检查它的长度:

if len(result) > 0:

但是您的测试应该作为空列表或字典评估为False

create or replace function p()
returns boolean as $$

result = plpy.execute('select 1 as i where false')
if result: return True
else: return False

$$ language plpythonu;

返回false

select p();
 p 
---
 f

将参数传递给execute而不是替换自己。否则你很容易受到SQL注入:

query = """
    select value
    from table
    where doctitle like format('%%%s%%', $1)
"""
plan = plpy.prepare(query, ["text"])
result = plpy.execute(plan, [_text_parameter])
if result:
    final = result[0]["value"]

https://www.postgresql.org/docs/current/static/plpython-database.html