如何在 Flask 中使用 SQLAlchemy 调用数据库函数?

新手上路,请多包涵

我想调用我在 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 许可协议

阅读 717
2 个回答

如果你想在没有原始 sql 的情况下做到这一点,你可以使用 func 来自 sqlalchemy:

 from sqlalchemy import func

data = db.session.query(func.your_schema.your_function_name()).all()

原文由 Théo Le 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以使用函数

句法:

   from sqlalchemy import func

  func.function_name(column)

例子:

 from sqlalchemy import func

result = db.session.query(func.lower(Student.name)).all()

原文由 Mohammad Aarif 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏