我想调用我在 PostgreSQL 数据库中创建的函数。我看过官方的 SQLAlchemy 文档以及这里关于 SO 的几个问题,但似乎没有人解释如何在 SQLAlchemy 中设置函数。
我确实找到 了这个问题,但不确定如何按照答案建议编译该函数。该代码去哪里了?当我尝试将其放入我的视图和模型脚本时出现错误。
编辑 1 (8/11/2016)
根据社区的要求和要求,以下是我遗漏的所有细节:
我有一个名为 books 的表格,其列排列了有关一般书籍的信息(标题,作者,出版日期……)。
然后我有许多相同类型的表格,其列包含有关每本书中所有章节的信息(章节名称、长度、简短摘要…)。 每本书都有自己的表格是绝对必要的。 我玩过所有章节的一张大桌子,发现它不适合我的需要,更不用说极其笨重了。
我要询问的函数查询书名中的书名,并将书名转换为 regclass。然后它查询 regclass 对象的所有数据,将所有行作为一个表返回,就像单独的书表一样,然后退出。这是原始代码:
CREATE OR REPLACE FUNCTION public.get_book(bookName character varying)
RETURNS TABLE(/*columns of individual book table go here*/)
LANGUAGE plpgsql
AS $function$
declare
_tbl regclass;
begin
for _tbl in
select name::regclass
from books
where name=bookName
loop
return query execute '
select * from ' ||_tbl;
end loop;
end;
$function$
此功能已在命令行和 pgAdmin 中多次测试。它按预期工作。
我的目的是在我的 Flask 应用程序中创建一个视图,其路由为 @app.route('/book/<string:bookName>')
并在呈现模板之前调用上述函数。具体视图如下:
@app.route('/book/<string:bookName>')
def book(bookName):
chapterList = /*call function here*/
return render_template('book.html', book=bookName, list=chapterList)
这是我的问题:如何以 SQLAlchemy 知道并可以调用数据库中的函数的方式设置我的应用程序?我也愿意接受其他获得相同结果的建议。
PS 我只是为了让我的问题尽可能抽象而省略了这些信息,不知道论坛的规则规定了对一个非常具体的问题的要求。请原谅我知识的匮乏。
原文由 joepin 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你想在没有原始 sql 的情况下做到这一点,你可以使用
func
来自 sqlalchemy: