2011-11-03 18 views
11

Có cách nào để sử dụng trình giữ chỗ có độ dài thay đổi trong truy vấn SQL không?Cách lấy các phần giữ chỗ có chiều dài thay đổi trong một cuộc gọi Python tới SQLite3

Ngay bây giờ với một 3-tuple, tôi viết một cái gì đó như thế này:

c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup) 

Nhưng nếu TUP có thể có độ dài khác nhau, có lẽ là một 4-tuple hoặc 2-tuple? Có một cú pháp để sử dụng trình giữ chỗ trong tình huống này không? Nếu không, cách ưa thích để viết mã là gì?

Trả lời

12

Bạn sẽ phải làm một cái gì đó như thế này (để sử dụng ví dụ của bạn):

tup = ... # some sequence/tuple of unknown length 
sql = 'SELECT * FROM table WHERE word IN (%s)' % ', '.join('?' for a in tup) 
c.execute(sql, tup) 

Bằng cách này bạn đang tự động tạo danh sách giữ chỗ và định dạng chuỗi SQL trước module sqlite3 phân tích nó ra.

+0

Tôi đã hy vọng có ?? hoặc? * biến thể cho loại điều này, nhưng đề xuất của bạn sẽ làm tốt. –

+3

Tôi muốn viết '', '.join ('? 'Cho một tup) 'như'', '.join ('? '* Len (tup)) ' – Duncan

+3

@Duncan: Idunno dường như ít rõ ràng đối với tôi nhiễu tín hiệu nhiều hơn. Máy phát hiểu được dường như đọc nhiều hơn như tiếng Anh – rossipedia

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