Python中查询的语法是什么?

Python中查询的语法是什么?,python,sqlite,python-2.6,Python,Sqlite,Python 2.6,我有点明白这是怎么回事,但在WHERE之后我就迷路了。请告诉我以下问题的症结所在,并帮助我了解其总体情况: myVariable = cursor.execute("SELECT TARGET_.*, TARGET_, SOFTWARE_TARGET_ WHERE" "SOFTWARE_TARGET_.SOFTWARE1=%(sw_ID)s AND" "SOFTWARE_TARGET_.T

我有点明白这是怎么回事,但在
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
和下一个单词之间没有空格;字符串连接不会添加空格。第二个字符串末尾的
也会发生同样的情况:

>>> ("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


的WHERE
和下一个单词之间没有空格;字符串串联不会添加空格。第二个字符串末尾的
也会出现同样的情况:

>>> ("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



Martijns的答案看起来是正确的,但您编辑的答案不正确。请注意,您使用的是
sw_id==sw_id
,它的计算结果为布尔值,在这里没有实际意义。你可能想用
{“sw_id”:sw_id}
来替换它(就像Martijn在他的答案中所做的那样)。

Martijn的答案看起来是正确的,但你编辑的答案却不正确。请注意,您使用的是
sw_id==sw_id
,它的计算结果为布尔值,在这里没有实际意义。您可能想用
{“sw_id”:sw_id}
(就像Martijn在回答中所做的那样)。

看起来您的问题末尾有一个额外的括号。问题解决后,请不要更新您的问题,而只是用新语法问一个新问题。@AdamSmith这不算是同一个问题吗?更新后的代码给了我同样的错误。把这个问题再问一遍似乎有点过分了。这将是一个几乎完全相同的副本。@Kimbluy是的,这样下一个和你有相同问题的人(要么是因为concat中缺少空格,要么是因为你的其他问题的原因——我不认为是直接的)就可以找到他们需要的答案。@martineau这从来不是结束问题的理由。判断一个问题是否对其他有相同问题的人有用。看起来你的问题末尾有一个额外的括号。当你的问题解决后,请不要更新你的问题,而只是用新语法问一个新问题。@AdamSmith这不算是同一个问题吗?更新后的代码给了我同样的错误。把这个问题再问一遍似乎有点过分了。这将是一个几乎完全相同的副本。@Kimbluy是的,这样下一个和你有相同问题的人(要么是因为concat中缺少空格,要么是因为你的其他问题的原因——我不认为是直接的)就可以找到他们需要的答案。@martineau这从来不是结束问题的理由。判断一个问题是否对其他有相同问题的人有用。@Kimbluy您使用的是什么数据库库?支持哪种类型的参数取决于库。我不确定在哪里可以找到这些信息……我所知道的是我使用的是Python 2.6、ElementTree、SQLite3,并且数据库是关系数据库。不确定这是否有助于回答您的问题。不过现在没事了,我不再使用这个代码了。谢谢你的支持answer@Kimblueysqlite3是我在这里追求的东西;库使用不同的语法,仅支持位置参数。感谢提供更多信息!我以前不知道SQLite3的不同样式参数……所以看起来,
总是用作占位符,什么都没有else@Kimbluey您使用的是什么数据库库?支持哪种类型的参数取决于库。我不确定在哪里可以找到这些信息……我所知道的是我使用的是Python 2.6、ElementTree、SQLite3,并且数据库是关系数据库。不确定这是否有助于回答您的问题。不过现在没事了,我不再使用这个代码了。谢谢你的支持answer@Kimblueysqlite3是我在这里追求的东西;库使用不同的语法,仅支持位置参数。感谢提供更多信息!我以前不知道SQLite3的不同样式参数……所以看起来,
总是用作占位符,其他什么都不用