簡體   English   中英

如何通過SQLAlchemy從Postgres函數返回可讀的結果?

[英]How to return a readable result from Postgres function by SQLAlchemy?

我正在從Flask-SQLAlchemy調用Postgres函數。 該函數返回一個具有2個值的表:字符串和數字:

CREATE OR REPLACE FUNCTION public.test (
  id varchar
)
RETURNS TABLE (
  project_name varchar,
  projects_num integer
) AS
$body$
DECLARE 
BEGIN    
...
RETURN QUERY (SELECT project.name as project_name, project_nums as projects_num);   
END;
$body$
LANGUAGE 'plpgsql'

在Flask方面,我正在執行以下調用:

engine = create_engine(url)
connection = engine.connect()
result = connection.execute('SELECT "test"(\'123\')').fetchone()

然后,我試圖從結果中獲取數據。

for row in result:
    print(literal_eval(row))

拋出異常是因為實際上row有一個字符串:

(my_project, 3)

當然,它也不知道my_project是什么。 如何使其正確返回結果或正確處理結果? 例如,它可能會返回('my_project', 3)

我解決了這個問題加括號

('"' || account_object.valid_status || '"')

但這看起來糟透了,不敢相信沒有正常的解決方法嗎? Null的另一個問題-它只是不包含在元組中:( (,0) -應該如何處理?

字符串值是Postgresql復合(行)值的表示形式,因此,顯然不打算將其視為Python文字。 Psycopg2可以處理復合類型值並將其適應Python值,但這需要使用創建的類型。 在您的情況下,簡單的解決方案是從表值函數中進行選擇,而不是將其用作選擇列表項:

result = connection.execute('SELECT * FROM "test"(\'123\')').fetchone()
print(result.project_name, result.projects_num)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM