2012-01-08 28 views
9

tôi muốn làm một Python MySQL truy vấn như:MySQL Python NHƯ wildcard

cursor = connection.cursor() 
sql = "select text \ 
     from steps \ 
     where text like '%start%'" 
cursor.execute(sql) 

Nhưng% không được coi là một ký tự đại diện, nó chờ đợi một biến, tôi đoán. Tôi gặp lỗi:

TypeError: not enough arguments for format string 

Không có gì có vẻ hiệu quả. Nó cũng sẽ được tốt đẹp nếu tôi có thể sử dụng một biến thay vì '% bắt đầu%'

Trả lời

16

Tôi giả sử bạn đang sử dụng python db-api.

Bạn có thể thử thoát % làm %%.

Đối với đi qua các thông số có một số cách khác nhau, ví dụ:

cursor = connection.cursor() 
sql = """select text 
    from steps 
    where text like %s""" 
cursor.execute(sql, (('%' + 'start' + '%',)) 

Bạn có thể xem các ví dụ trong những cách khác của tham số truyền on this blog trong "Giao diện modułu" phần. Không phải tất cả chúng đều hoạt động với tất cả các kết nối.

+1

Thoát bằng %% hoạt động, nhờ :) Sử dụng chuỗi ký tự có cùng lỗi. – user984003

+0

@ user984003 lạ, nhưng tôi thậm chí không thể kiểm tra nó ngay bây giờ. vui mừng nó đã giúp anyway. – soulcheck

+0

@soulcheck: Chuỗi cú pháp không liên quan gì đến việc diễn giải '%' (không giống như cách Bourne Shell hoặc Ruby giải thích '$', ví dụ). Vì vậy, '" ""% start% "" "' là chính xác giống như '"% start% "', giống như ''% start%'' và 'r '% start%'', v.v. –