11

私はこのカーソルを持っています

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

このエラーが発生します

'Cursor' object has no attribute '_last_executed'

しかし、私がこれを試してみると:

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

エラーはありません。これを修正するにはどうすればよいですか?

4

6 に答える 6

8

私もこの問題に遭遇しました。%d を %s に変更したら解決しました。これがあなたに役立つことを願っています。

于 2013-01-23T07:01:46.677 に答える
5

問題は、選択した文字列で適切に置換を行っていないことです。ドキュメントから:

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

    """

したがって、次のようになります。

cursor.execute("SELECT price FROM Items WHERE itemID = ( 
              SELECT item_id FROM Purchases 
              WHERE purchaseID = ? AND customer_id = ?)", 
              (self.purchaseID, self.customer))
于 2012-10-02T14:20:34.150 に答える
2

その理由は、'%d' を使用しているためです。SQL で '%' を使用すると、execute は '%' を形式として解釈します。次のようにステートメントを書く必要があります。

cursor.execute("SELECT price FROM Items WHERE itemID = ( 
                SELECT item_id FROM Purchases 
                WHERE purchaseID = %%d AND customer_id = %%d)", 
                [self.purchaseID, self.customer])
于 2013-02-26T13:51:08.493 に答える
1

ダブル%%を使用して私のために働いた

  "SELECT  title, address from table t1, table t2 on t1.id=t2.id where t1.title like '%%Brink%%' "
于 2015-10-24T17:35:36.883 に答える