2016-09-08 4 views
0

나는 SQL 쿼리에 변수로 테이블 이름을 전달하고 SQLAlchemy의 커서를 실행하려고 :SqlAlchem ​​y의 mysql을 매개 변수화 된 쿼리

from sqlalchemy.sql import text 

cur = DB_ENGINE.connect() 
p = cur.execute(text('select * from :table'), {'table':'person'}).fetchall() 
print p 

나는이 오류 메시지가 있어요 :

ProgrammingError: (_mysql_exceptions.ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''person'' at line 1") [SQL: u'select * from %s'] [parameters: ('person',)] 

나 잘못 했니?

답변

0

자리 표시자는 VALUES 만 나타낼 수 있습니다. SQL 키워드/식별자에는 사용할 수 없습니다.

동적으로 식별자를 변경해야하는 경우 검색어 문자열을 직접 작성해야합니다 (예 :

sql = "SELECT foo FROM " + var_with_table_name + "WHERE somefield = ?" 

그런 다음 SQL 주입 공격을 열어 부팅합니다.

+0

감사합니다. –

관련 문제