代码之家  ›  专栏  ›  技术社区  ›  Houy Narun

如何在Python中获取PostgreSql函数返回的查询对象?

  •  0
  • Houy Narun  · 技术社区  · 7 年前

    带pgsql函数 SelRec(integer) 定义如下:

    -- select record
    CREATE OR REPLACE FUNCTION SelRec(_sno integer)
      RETURNS SETOF app_for_leave AS
    $BODY$
        BEGIN
        RETURN QUERY
            SELECT * FROM "app_for_leave" WHERE "sno"=_sno;
        END
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE;
    

    import psycopg2
    
    connection_string = 'postgresql://postgres:111111@localhost:5432/myDB'
    
    conn = psycopg2.connect(connection_string)
    cursor = conn.cursor()
    
    obj = cursor.execute("select * from SelRec(1)");
    
    conn.commit()
    
    print obj # None
    

    None 好像没有存储任何数据,但它确实存在,如下所示:

     sno | eid | ename |     sd     |     ed     | sid | status 
    -----+-----+-------+------------+------------+-----+--------
       1 | 101 |       | 2013-04-04 | 2013-04-04 |   2 | f
    

    obj DataSet = obj.first() ,和 DataSet.status ,每个值的ect。

    有什么建议我可以做到吗?谢谢。

    2 回复  |  直到 7 年前
        1
  •  1
  •   jmunsch Colin Pickard    7 年前

    我想这可能是意料之中的行为。

    从文件中 http://initd.org/psycopg/docs/cursor.html#cursor.execute

    方法返回None。如果执行了查询,则返回的值 可以使用fetch*()方法检索。

    print(dir(obj), type(obj))
    print(cursor.fetchall())
    
        2
  •  0
  •   Bharti Mohane    7 年前

    我想你应该试试下面给出的问题。因为您想返回一组行。

    select * from SelRec(1) as result (sno int, eid int, ename varchar, sd data_type, ed data_type, sid int, status boolean)