2017-10-16 11 views
1

私はpython(2.7.10)でpsycopg2を使用してpostgresql DBに接続します。psycopg2で動的SQL文字列を作成する

SQLクエリ文字列に変数を渡すために決して、は決して、NEVER使用Pythonの文字列連結(+)または文字列パラメータの補間(%):ドキュメントは、動的SQLステートメントの組成についてかなり明確です。ガンポイントでさえも。

psycopg2バージョン2.7には、この文字列の構成をSQLインジェクションに対して安全に行うための新しいsqlモジュールがあります。あなたは、クエリに識別子を補間するpsycopg2.sql.Identifierを使用することができます

import psycopg2 as ps 

C = psycopg.connect(host='my_host', port=Port, database='My_DB') 
cur = C.cursor() 
schema = 'some_schema' 
table = 'some_table' 
SQL = cur.execute("SELECT * FROM "+schema+"."+table"+";")# This is horribly wrong 
SQL = cur.execute("SELECT * FROM some_schema.some_table;") # That's what the result should be 

答えて

1

例えば、:のように私はそれにもかかわらず、適切に声明を構築する方法を理解していません

from psycopg2 import sql 

SQL = sql.SQL("SELECT * FROM {}").format(sql.Identifier(".".join([schema, table]))) 
print SQL.as_string(C)  
cur.execute(SQL) 
+0

join()のアイデアがありませんでした。 – Dschoni

関連する問題