2012-12-27 26 views
5

này hoạt động tốt:psycopg2 "IndexError: chỉ số tuple ra khỏi phạm vi" Lỗi khi sử dụng '%' như nhà điều hành với các đối số tuple

cc.execute("select * from books where name like '%oo%'") 

Nhưng nếu đối số thứ hai thông qua:

cursor.execute("select * from books where name like '%oo%' OFFSET % LIMIT %", (0,1)) 

lỗi Psycopg :

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: tuple index out of range 

Làm thế nào để tránh lỗi này?

Trả lời

4

Trước hết, bạn nên sử dụng %% để chèn % theo nghĩa đen, nếu không, thư viện sẽ cố gắng sử dụng tất cả % làm trình giữ chỗ. Thứ hai, tốt hơn là chỉ định %s, nơi bạn muốn chèn các giá trị.

Vì vậy, mã của bạn sẽ giống như thế:

cursor.execute("select * from books where name like '%%oo%%' OFFSET %s LIMIT %s", (0,1)) 
+0

Ghi chú rằng trong python 3 bạn sẽ muốn thêm một dấu phẩy trong tuple của bạn: 'cursor.execute (" select * from sách nơi tên như '% % oo %% 'OFFSET% s LIMIT% s ", (0,1,))', nếu không bạn sẽ nhận được 'TypeError: không phải tất cả các đối số được chuyển đổi trong khi định dạng chuỗi'. –

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