2016-08-10 4 views
1

PostgreSQL 데이터베이스에서 작성한 함수를 호출하고 싶습니다. 공식 SQLAlchemy 문서뿐만 아니라 여기에 몇 가지 질문을 봤는데 아무도 SQLAlchemy에서 함수를 설정하는 방법을 설명하는 것 같습니다.플라스크에서 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에서 여러 번 테스트되었습니다. 그것은 예상대로 작동합니다.

제 의도는 내 플러시 앱에서 경로가 @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. 나는 포럼의 규칙이 매우 구체적인 질문에 대한 요구 사항을 지시한다는 것을 알지 못해 가능한 한 추상적 인 것으로 나의 질문을 지킬 의도로이 정보를 생략했다. 나의 지식 부족을 용서해주십시오. 당신은 원시 SQL없이 수행 할 경우

+0

무엇 [텍스트 SQL (HTTP에 대해 : //docs.sqlalchemy.org/en/latest/core/tutorial.html#using-textual-sql)? – roy

+1

당신의 기능은 무엇을합니까? 어떻게 링크 된 답변을 시도 했습니까? 무엇이 효과가 없었습니까? [편집]을 클릭하여 [mcve]를 포함하십시오. – davidism

답변

0
from sqlalchemy.sql import text 
with engine.connect() as con: 
    statement = text("""your function""") 
    con.execute(statement) 

당신은 SQLAlchemy의에서 func를 사용할 수 SQLAlchemy의

2

을 통해 원시 SQL을 실행해야합니다

from sqlalchemy import func 

data = db.session.query(func.your_schema.your_function_name()).all() 
관련 문제