如何在Python中将变量传递给SQL

如何在Python中将变量传递给SQL,python,Python,我有一个python脚本,如下所示。它将接收参数,并在数据库中查询。但是,我不知道如何将变量abcd传递给下面提到的SQL语句 abcd=sys.argv[3] cursor=db.cursor() cursor.execute(“从票据中选择计数(id)”,其中 状态为“已关闭”,版本为“abcd”,id为(%s)”%,。加入(票证)) 我尝试了%s的不同选项。但是所有抛出语法错误。您可以在 我认为这种方法将对您有所帮助: cursor = db.cursor() cursor.execu

我有一个python脚本,如下所示。它将接收参数,并在数据库中查询。但是,我不知道如何将变量
abcd
传递给下面提到的SQL语句

abcd=sys.argv[3]

cursor=db.cursor()
cursor.execute(“从票据中选择计数(id)”,其中
状态为“已关闭”,版本为“abcd”,id为(%s)”%,。加入(票证))

我尝试了%s的不同选项。但是所有抛出语法错误。

您可以在

我认为这种方法将对您有所帮助:

cursor = db.cursor() 
cursor.execute("SELECT COUNT(id) FROM ticket WHERE status <> 'closed' AND version = 'abcd' AND id IN (%s)", [','.join(tickets)])
cursor=db.cursor()
cursor.execute(“从状态为“closed”且版本为“abcd”且id位于(%s)中的票据中选择计数(id)”,[,“.加入(票据)])

编辑2021:做你必须做的事,但不要遵循~7年前的建议。请参阅下面的评论。

我认为你需要得到正确的答案

试着这样做:

query = "SELECT count(id) FROM ticket WHERE version = %(version)s and id IN %(tpl)s" % {'version': 1, 'tpl': (1, 2, 3, 4)}

cursor.execute(query)

你能修正缩进错误吗?这段代码在函数中吗?请不要建议SQL查询使用字符串插值。这是一个巨大的安全问题,永远不应该被推荐。大多数库都有将参数作为参数化查询传入的方法。即使这在理论上是安全的,因为你没有使用用户生成的数据,这是一个不必要的风险,它的所有使用都应该有一个巨大的警告!没错。谢谢你指出这一点。我当时比现在更糊涂!
query = "SELECT count(id) FROM ticket WHERE version = %(version)s and id IN %(tpl)s" % {'version': 1, 'tpl': (1, 2, 3, 4)}

cursor.execute(query)