2016-11-20 28 views
0

我是新來的蟒蛇。我有以下代碼,我需要多次調用同一個變量。我怎樣才能做到這一點?在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) 

如何告訴python使用'value'來表示'%s'的所有外觀? %(row)在%s只出現一次時起作用:

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)}) 

雖然這看起來像字符串%格式,它實際上不是,所以這是從SQL注入攻擊安全,而字符串格式化(使用%.format()不是。