错误:光标'对象没有属性'_last_executed

ski*_*123 11 python string django cursor rawsql

我有这个光标

cursor.execute("SELECT price FROM Items WHERE itemID = ( 
                  SELECT item_id FROM Purchases 
                  WHERE purchaseID = %d AND customer_id = %d)", 
                  [self.purchaseID, self.customer])
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

'Cursor' object has no attribute '_last_executed'
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个:

cursor.execute("SELECT price FROM Items WHERE itemID = ( 
                  SELECT item_id FROM Purchases 
                  WHERE purchaseID = 1 AND customer_id = 1)", 
                  )
Run Code Online (Sandbox Code Playgroud)

没有错误.我该如何解决?

小智 8

我也遇到过这个问题.我将%d更改为%s,它就解决了.希望这对你有用.


jua*_*ith 5

问题是你没有在你的选择字符串中正确地进行替换.来自docs:

def execute(self, query, args=None):

    """Execute a query.

    query -- string, query to execute on server
    args -- optional sequence or mapping, parameters to use with query.

    Note: If args is a sequence, then %s must be used as the
    parameter placeholder in the query. If a mapping is used,
    %(key)s must be used as the placeholder.

    Returns long integer rows affected, if any

    """
Run Code Online (Sandbox Code Playgroud)

所以,它应该是:

cursor.execute("SELECT price FROM Items WHERE itemID = ( 
              SELECT item_id FROM Purchases 
              WHERE purchaseID = ? AND customer_id = ?)", 
              (self.purchaseID, self.customer))
Run Code Online (Sandbox Code Playgroud)

  • 请不要将`format()`与SQL语句结合使用!拜托,请不要.您自己容易受到SQL注入攻击.始终使用正确的`execute()`语法,如第一个示例所示(第二个参数是为查询中的占位符提供数据的元组;占位符依赖于[PEP 249]的SQL库(http:// www .python.org/dev/peps/pep-0249 /),搜索`paramstyle`.) (14认同)