在Python中查询的语法是什么?

时间:2015-03-04 22:34:13

标签: python sqlite python-2.6

我理解这是如何工作的,但是在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

2 个答案:

答案 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,))

引用sqlite3 documentation

  

?作为占位符放在任何想要使用值的位置,然后提供一个值元组作为游标execute()方法的第二个参数。 (其他数据库模块可能使用不同的占位符,例如%s:1。)

答案 1 :(得分:1)

Martijns的答案看似正确 - 但您编辑的答案并非如此。请注意,您正在使用sw_id==sw_id,它评估为布尔值,并且在这里确实没有意义。您可能希望将其替换为{"sw_id":sw_id}(就像Martijn在答案中所做的那样)。