【问题标题】:What is the syntax for querying in Python?Python中查询的语法是什么?
【发布时间】:2015-03-04 22:34:12
【问题描述】:

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

【问题讨论】:

  • 看起来你最后多了一个括号。
  • 当你的问题解决后,请不要更新你的问题,只用新的语法问一个新的问题。
  • @AdamSmith 这不算同一个问题吗?更新的代码给了我同样的错误。再次问这个问题似乎有点过分。这将是几乎一模一样的副本。
  • @Kimbluey 是的,下一个遇到同样问题的人就是这样(连接中缺少空格或其他问题的原因是什么——我不认为它是临时的) ) 可以找到他们需要的答案。
  • @martineau 这绝不是关闭问题的理由。而是根据对有相同问题的其他人的有用性来判断问题。

标签: python sqlite python-2.6


【解决方案1】:

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。)

【讨论】:

  • @Kimbluey 您使用的是什么数据库库?支持哪种样式的参数取决于库。
  • 我不确定在哪里可以找到这些信息...我只知道我正在使用 Python 2.6、ElementTree、SQLite3 并且该数据库是一个 关系数据库。不确定这是否有助于回答您的问题。不过现在很好,我不再使用此代码。谢谢你的回答
  • @Kimbluey sqlite3 是我在这里所追求的;该库使用不同的语法,并且仅支持位置参数。
  • 感谢您提供更多信息!我之前不知道 SQLite3 的不同样式参数......所以看起来? 总是用作占位符,没有别的
【解决方案2】:

Martijns 的答案似乎正确 - 但您编辑的答案不正确。请注意,您使用的是sw_id==sw_id,它的计算结果为布尔值,在这里没有任何意义。您可能想用 {"sw_id":sw_id} 替换它(就像 Martijn 在他的回答中所做的那样)。

【讨论】:

    猜你喜欢
    • 2013-10-23
    • 2023-03-12
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多