在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,))

引用 sqlite3 documentation:

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 在他的回答中所做的那样)。