我理解这是如何工作的,但是在WHERE
之后我迷路了。请告诉我以下内容有什么问题,并帮助我了解它的一般情况:
myVariable = cursor.execute("SELECT TARGET_.*, TARGET_, SOFTWARE_TARGET_ WHERE"
"SOFTWARE_TARGET_.SOFTWARE1=%(sw_ID)s AND"
"SOFTWARE_TARGET_.TARGET2=TARGET_.ID", sw_ID=sw_ID))
我一直收到以下错误:
OperationalError: near "%": syntax error
答案 0 :(得分:4)
WHERE
和下一个字之间没有空格;字符串连接不会添加空格。第二个字符串末尾的AND
也是如此:
>>> ("SELECT TARGET_.*, TARGET_, SOFTWARE_TARGET_ WHERE"
... "SOFTWARE_TARGET_.SOFTWARE1=%(sw_ID)s AND"
... "SOFTWARE_TARGET_.TARGET2=TARGET_.ID")
'SELECT TARGET_.*, TARGET_, SOFTWARE_TARGET_ WHERESOFTWARE_TARGET_.SOFTWARE1=%(sw_ID)s ANDSOFTWARE_TARGET_.TARGET2=TARGET_.ID'
在此更容易使用"""
三重引号的多行字符串:
myVariable = cursor.execute("""
SELECT TARGET_.*, TARGET_, SOFTWARE_TARGET_ WHERE
SOFTWARE_TARGET_.SOFTWARE1=%(sw_ID)s AND
SOFTWARE_TARGET_.TARGET2=TARGET_.ID""", {'sw_ID': sw_ID})
请注意,如果您使用sqlite3
,则只能使用?
占位符>> SQL参数:
myVariable = cursor.execute("""
SELECT TARGET_.*, TARGET_, SOFTWARE_TARGET_ WHERE
SOFTWARE_TARGET_.SOFTWARE1=? AND
SOFTWARE_TARGET_.TARGET2=TARGET_.ID""", (sw_ID,))
将
?
作为占位符放在任何想要使用值的位置,然后提供一个值元组作为游标execute()
方法的第二个参数。 (其他数据库模块可能使用不同的占位符,例如%s
或:1
。)
答案 1 :(得分:1)
Martijns的答案看似正确 - 但您编辑的答案并非如此。请注意,您正在使用sw_id==sw_id
,它评估为布尔值,并且在这里确实没有意义。您可能希望将其替换为{"sw_id":sw_id}
(就像Martijn在答案中所做的那样)。