Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
803 views
in Technique[技术] by (71.8m points)

sqlite - How to get variable length placeholders in a Python call to SQLite3

Is there a way to use variable length placeholders in an SQL query?

Right now with a 3-tuple, I write something like this:

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

But what if the tup can be of differing lengths, perhaps a 4-tuple or 2-tuple? Is there a syntax for using placeholders in this situation? If not, what is the preferred way to write the code?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You'd have to do something like this (to use your example):

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

This way you're dynamically creating the placeholder list and formatting the SQL string before the sqlite3 module parses it out.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...