29

내가 (AN 증류기 스크립트 내) SQLAlchemy의와 매개 변수이 간단한 원시 SQL 문을 실행하기 위해 노력하고있어 :SQLAlchemy의 : 매개 변수 바인딩 원시 SQL을 실행

from alembic import op 

t = {"code": "123", "description": "one two three"} 

op.execute("insert into field_tags (id, field_id, code, description) "+ 
       "values (1,'zasz', :code ,:description')", t) 

을 그리고 난 다음 오류 얻을 :

sqlalchemy.exc.StatementError: A value is required for bind parameter 
    'description' (original cause: InvalidRequestError: A value is required for 
    bind parameter 'description') "insert into field_tags (id, field_id, code, 
    description) values (1, 'math', 
    %(code)s ,%(description)s)" [] 

용액 :

0

답변

32

당신은 connection 객체를 가져 거기에 execute()를 호출하고 키워드 인수로 쿼리 매개 변수를 전달해야합니다

from alembic import op 
from sqlalchemy.sql import text 

conn = op.get_bind() 
conn.execute(
    text(
     """ 
      insert into field_tags 
      (id, field_id, code, description) 
      values 
      (1, 'zasz', :code , :description) 
     """ 
    ), 
    **t 
) 

또한 참조 : How to execute raw SQL in SQLAlchemy-flask app.

+0

나는 (인수로 전달 **) 시도하고있어 : TypeError : execute() 예기치 않은 키워드 인수가 '코드' –

+0

@MaxL., 나쁘지, 당신은 업데이트 된 답변에서 코드를 시도해 주시겠습니까? 아이디어는 연결 객체를 가져 와서'execute()'를 호출하는 것입니다. – alecxe

+0

고마워, 도움이 되었어, 또 다른 변화가 있었어. 쿼리는 텍스트 함수 (sqlalchemy.sql 가져 오기 텍스트)로 감싸 져야하고, 답에 +1을주고, text() wrapp을 추가한다. (위의 업데이트에서와 같이) 나는 확실한 답으로 받아 들일 것입니다. –