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

我想调用我在PostgreSQL数据库中创建的函数。我已经看过官方的SQLAlchemy文档以及这里的几个问题,但似乎没有人解释如何在SQLAlchemy中设置函数。如何在Flask中使用SQLAlchemy调用数据库函数?

我确实发现this question,但我不确定如何编译该函数,正如答案所示。代码去哪了?当我尝试将它放入视图和模型脚本中时出现错误。

编辑1(2016年8月11日)

按照社区的要求和需求,这里都是我离开了细节:

我有一个表叫做书,它的列排列提供关于一般书籍(标题,作者,出版日期......)的信息。

然后我有很多表都是同一种类的列,它们的列包含有关每本书中所有章节(章节名称,长度,简短摘要...)的信息。 每本书都有自己的桌子是绝对必要的。我玩过所有章节中的一张大桌子,发现它不适合我的需要,不太讲究非常笨拙。

我正在询问的函数查询书籍的表格以查找单个书的名称,并将该书的名称转换为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的知道,可以拨打我有我的数据库中的功能?我也接受其他建议,以达到同样的结果。

P.S.我只是遗漏了这些信息,目的是让我的问题尽可能抽象,不知道论坛的规则要求提出一个非常具体的问题。请原谅我缺乏知识。

回答:

from sqlalchemy.sql import text 

with engine.connect() as con:

statement = text("""your function""")

con.execute(statement)

您必须通过SQLAlchemy的

回答:

执行原始的SQL如果你想这样做,没有原始的SQL语句,你可以使用func从SQLAlchemy的:

from sqlalchemy import func 

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

以上是 如何在Flask中使用SQLAlchemy调用数据库函数? 的全部内容, 来源链接: utcz.com/qa/266754.html

回到顶部