2016-11-20 18 views
0

私はPythonの初心者です。私は同じ変数を複数回呼び出す必要がある次のコードを持っています。これどうやってするの?SQLクエリで同じ変数を複数回使用する。 Pythonコード?

import psycopg2 as pg 

conn = pg.connect("dbname='db' user='user' host='localhost'")  

q1 = """SELECT value FROM t1;""" 
cur1 = conn.cursor() 
cur1.execute(q1) 

cur2 = conn.cursor() 

for row in cur1: 
    q2 = """SELECT * FROM t2 WHERE c1 = '%s' or c2 ='%s';""" 
    #what comes here? %s is the 'value' from q1 
    cur2.execute(q2) 
    for row in cur2: 
     print(row) 

'%s'のすべての外観に「値」を使用するようにPythonに指示するにはどうすればよいですか? %(行)は、%sが1回だけ表示されたときに機能します。

q2 = """SELECT * FROM t2 WHERE c1 = '%s' or c2 ='%s';"""(%row) 

私はstackoverflowを検索しましたが、私の答えが見つかりませんでした。重複した質問ではないことを願っています。 ありがとうございます。

答えて

0

psycopg2は、%(name)sスタイルパラメータマーカーを使用して名前付きパラメータをサポートします。 クエリで同じ名前のパラメータを複数回使用すると、毎回同じパラメータ値が渡されます。ここで

the documentationからの例です:

cur.execute(
    """INSERT INTO some_table (an_int, a_date, another_date, a_string) 
     VALUES (%(int)s, %(date)s, %(date)s, %(str)s);""", 
    {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)}) 

これは、文字列%フォーマットのように見えますが、それは実際にはありませんので、文字列フォーマット(%または.format()のどちらかではない使用している間には、SQLインジェクション攻撃から安全です。

関連する問題