在SQL查询中多次使用相同的变量。 Python代码?

时间:2016-11-20 01:35:45

标签: python sql variables

我是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'?当%s仅出现一次时,%(行)有效:

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

我搜索了stackoverflow但找不到我的答案。我希望这不是一个重复的问题。 谢谢。

1 个答案:

答案 0 :(得分:1)

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()则不是。