2012-10-02 18 views
10

を_last_executedない私はこのカーソルエラー:Cursorのオブジェクトが属性がいる "

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)", 
       ) 

がありますエラーはありません。これをどうやって解決するのですか?

+0

最終的にそれが動作しますあなたをしましたか? – juankysmith

+3

同じエラーメッセージが表示されましたが、ORMを使用しています。私の文字列をunicode()でカプセル化することで解決された文字セットの問題であることが判明しました。私はそれがあなたの質問に答えないことを知っていますが、答えを探すためにこのページに上陸する他の人に合うかもしれません。 –

+0

Tommyを投稿してくれてありがとう、間違いなく助けてくれた – Steve

答えて

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)) 
+0

それでも同じエラーが出る。 – skinnyas123

+0

あなたはどのバージョンのPythonを使用していますか? – juankysmith

+0

私はPython 2.7.2+を使用しています – skinnyas123

8

私もこの問題が発生しました。 %dを%sに変更して解決しました。これがあなたにとって有益であることを願います。

+0

これは私のために働いていました。 intの場合でも '%s'を渡す必要があります。 – user2233706

2

理由は、あなたが '%d'を使用しているためです。 SQLで '%'を使用すると、実行は '%'をフォーマットとして解釈します。あなたは、このようなあなたの文を書く必要があります。

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

私は同じ問題を抱えていますが、[生のクエリ](https://docs.djangoproject.com/ja/1.5/topics/db/sql/#executing-custom-sql-directly)のドキュメントでは、置換のための '% '。 – user2233706

+0

これは私のために同じような状況で働いた – Himanshu

1

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

"SELECT title, address from table t1, table t2 on t1.id=t2.id where t1.title like '%%Brink%%' " 
+1

これを控えめにした人のために、理由を説明するために気をつけますか? – Ram

関連する問題