2012-10-02 64 views
10

Tôi có con trỏ nàyLỗi: Cursor 'đối tượng không có thuộc tính' _last_executed

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

tôi nhận được lỗi này

'Cursor' object has no attribute '_last_executed' 

Nhưng khi tôi cố gắng này:

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

có không có lỗi. Làm thế nào để sửa lỗi này?

+0

Cậu cuối cùng làm cho nó làm việc? – juankysmith

+3

Tôi đã có thông báo lỗi tương tự, nhưng sử dụng ORM. Hóa ra là vấn đề bộ ký tự được giải quyết bằng cách đóng gói chuỗi của tôi bằng unicode(). Tôi biết nó không trả lời cho câu hỏi của bạn, nhưng nó có thể phù hợp với những người khác truy cập trang này để tìm câu trả lời. –

+0

Cảm ơn bạn đã đăng bài rằng Tommy, chắc chắn đã giúp tôi – Steve

Trả lời

5

Vấn đề là bạn không thay thế đúng cách trong chuỗi lựa chọn của mình. Từ tài liệu:

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 

    """ 

Vì vậy, nó phải là:

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

Nó vẫn tạo ra lỗi tương tự. – skinnyas123

+0

bạn đang sử dụng phiên bản python nào? – juankysmith

+0

Tôi đang sử dụng Python 2.7.2+ – skinnyas123

8

tôi gặp phải vấn đề này quá. Tôi đã thay đổi% d thành% s và nó được giải quyết. Điều này rất hữu ích cho bạn.

+0

Điều này làm việc cho tôi. Tôi đoán bạn phải vượt qua '% s' ngay cả đối với ints. – user2233706

2

Lý do là bạn đang sử dụng '% d'. Khi bạn sử dụng '%' trong SQL, thực thi sẽ diễn giải '%' làm định dạng. Bạn nên viết báo cáo của bạn như thế này:

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

Tôi đang gặp vấn đề tương tự, nhưng tài liệu cho [truy vấn thô] (https://docs.djangoproject.com/en/1.5/topics/db/sql/#executing-custom-sql-directly) nói để sử dụng một '%' để thay thế. – user2233706

+0

Điều này làm việc cho tôi trong một tình huống tương tự – Himanshu

1

Làm việc cho tôi sử dụng %% đôi

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

Đối với những người downvoted này, chăm sóc để giải thích tại sao? – Ram

Các vấn đề liên quan