在Python中查询的语法是什么?
What is the syntax for querying in Python?
我有点理解它是如何工作的,但在 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
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
,则只能使用 positional SQL 参数并使用 ?
占位符:
myVariable = cursor.execute("""
SELECT TARGET_.*, TARGET_, SOFTWARE_TARGET_ WHERE
SOFTWARE_TARGET_.SOFTWARE1=? AND
SOFTWARE_TARGET_.TARGET2=TARGET_.ID""", (sw_ID,))
Put ?
as a placeholder wherever you want to use a value, and then provide a tuple of values as the second argument to the cursor’s execute()
method. (Other database modules may use a different placeholder, such as %s
or :1
.)
Martijns 的答案似乎是正确的 - 但您编辑的答案不正确。请注意,您使用的是 sw_id==sw_id
,它的计算结果为布尔值,在这里没有任何意义。您可能想用 {"sw_id":sw_id}
替换它(就像 Martijn 在他的回答中所做的那样)。
我有点理解它是如何工作的,但在 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
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
,则只能使用 positional SQL 参数并使用 ?
占位符:
myVariable = cursor.execute("""
SELECT TARGET_.*, TARGET_, SOFTWARE_TARGET_ WHERE
SOFTWARE_TARGET_.SOFTWARE1=? AND
SOFTWARE_TARGET_.TARGET2=TARGET_.ID""", (sw_ID,))
Put
?
as a placeholder wherever you want to use a value, and then provide a tuple of values as the second argument to the cursor’sexecute()
method. (Other database modules may use a different placeholder, such as%s
or:1
.)
Martijns 的答案似乎是正确的 - 但您编辑的答案不正确。请注意,您使用的是 sw_id==sw_id
,它的计算结果为布尔值,在这里没有任何意义。您可能想用 {"sw_id":sw_id}
替换它(就像 Martijn 在他的回答中所做的那样)。