我是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但找不到我的答案。我希望这不是一个重复的问题。 谢谢。
答案 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()
则不是。