2012-07-27 34 views
12

Tôi đang cố gắng thực hiện truy vấn để tìm kiếm 3 bảng trong cơ sở dữ liệu bằng cách sử dụng MySQL thông qua Python. Mỗi lần tôi thử và thực hiện chuỗi sau đây dưới dạng truy vấn, nó cho tôi một lỗi về việc nối trong chuỗi.Python: ValueError: ký tự định dạng không được hỗ trợ '' '(0x27) tại chỉ mục 1

"SELECT fileid FROM files WHERE description LIKE '%" + search + "%' OR filename LIKE '%" + search + "%' OR uploader LIKE '%" + search + "%' ORDER BY fileid DESC" 

Đây là lỗi nó mang lại cho tôi:

ValueError: unsupported format character ''' (0x27) at index 1 

Nếu tôi loại bỏ các nhân vật nó yêu cầu sau đó tôi còn phải tháo%, mà dừng lại các truy vấn từ thực tế hoạt động bình thường. Tôi có thể làm gì để sửa lỗi này, vì tôi khá mới với Python.

Cảm ơn, Kris

+4

Sử dụng công cụ thay thế chuỗi được tạo sẵn cho công cụ SQL của bạn thay vì cố tự xây dựng chuỗi truy vấn bằng cơ chế chuỗi chuẩn Python. Nó hoạt động tốt hơn theo cách đó. Bạn đang sử dụng MySQLdb? –

+1

Có Tôi đang sử dụng MySQLdb và tôi có thể tìm thấy các công cụ thay thế này ở đâu? – user1558746

+2

Tài liệu tại http://mysql-python.sourceforge.net/MySQLdb.html#functions-and-attributes nói rằng "Lưu ý rằng bất kỳ dấu hiệu phần trăm chữ nào trong chuỗi truy vấn được chuyển đến execute() phải được thoát, nghĩa là %% . " Bạn đang sử dụng 'execute()'? Các công cụ thay thế @Silas được đề cập được hiển thị tại http://mysql-python.sourceforge.net/MySQLdb.html#some-examples – LarsH

Trả lời

34

Dường như python được giải thích% như một nhân vật định dạng printf-như thế nào. Thử sử dụng %%?

"SELECT fileid 
FROM files 
WHERE description LIKE '%%%s%%' 
    OR filename LIKE '%%%s%%' 
    OR uploader LIKE '%%%s%%' 
    ORDER BY fileid DESC" % (search, search, search) 
+0

Cảm ơn rất nhiều, điều đó đã làm được! :) – user1558746

+3

Để chính xác, MySQLdb sử dụng toán tử **% ** để đưa các tham số vào truy vấn, cho bất kỳ ký tự **% ** nào trong chuỗi truy vấn được hiểu là khởi đầu của một trình xác định đối số. Để ngăn việc sử dụng này _ %% _ cho _% _ trong truy vấn. Vui lòng xem thêm tài liệu thích hợp: [định dạng chuỗi] (http://docs.python.org/2/library/stdtypes.html#string-formatting) – Magentron

0

bạn có thể thử như thế này:

SELECT fileid 
FROM files 
WHERE description LIKE '%%%%%s%%%%' 
OR filename LIKE '%%%%%s%%%%' 
OR uploader LIKE '%%%%%s%%%%' 
ORDER BY fileid DESC" % (search, search, search) 
+0

Bạn có thể giải thích lý do tại sao câu trả lời này không? – IanS

0

Giải pháp của tôi:

query = """SELECT id, name FROM provice WHERE name LIKE %s""" 
cursor.execute(query, '%%%s%%' % name) 

Tôi nghĩ đó là cách dễ dàng để khắc phục vấn đề này!

+0

Ehm, bạn biết rằng phần '%%% s %% '% name' là hoàn toàn không cần thiết? ... Tham số của truy vấn là'% s' được thay thế bằng ORM hoặc DB trừu tượng bạn đang sử dụng sử dụng ... – AuHau

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