【发布时间】:2021-06-12 05:37:56
【问题描述】:
我在 SO 上遇到类似问题的唯一一次是在 here,但建议的解决方案与我无关。
我调用了一个 PostgreSQL 函数,但它返回一个值而不是每个字段一个值,我可以访问它。我有一个表"Words",它由一个主键word 和其他字段组成。
这是函数:
CREATE OR REPLACE FUNCTION equal(s TEXT)
RETURNS "Word" AS $$
SELECT *
FROM "Word"
WHERE word = s;
$$
LANGUAGE sql;
这是函数调用(使用 SQLAlchemy):
result = db.session.query(func.equal("is")).first()
输出将是:'(is, ... )',而不是所需的输出:('is', ...)。
如何调整函数以使其返回元组?
跟进问题
正如建议的那样,db.session.execute(f"SELECT * FROM equal('{w}');").first() 可以解决问题。不幸的是,如果没有找到结果,它会返回None 的列表。我希望它返回None。我原始方法中的 query 对象执行此操作,但将输出作为字符串返回。
【问题讨论】:
-
文档说:
For all other PostgreSQL return types, the returned Python value is converted to a string using the Python builtin str, and the result is passed to the input function of the PostgreSQL data type.这可能暗示这是按预期进行的,但我仍然不确定如何将字符串转换为可用的元组。eval()将其标记为语法无效的元组,因为第一个字符串(在本例中为“is”)。
标签: sql postgresql sqlalchemy sql-function set-returning-functions