2016-09-08 19 views
0

私はSQLクエリに変数として、テーブル名を渡すと、SQLAlchemyのカーソルでそれを実行しようとしています:SQLAlchemyの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

、ありがとうございました! –