开发者

python string substitution in sqlite query

开发者 https://www.devze.com 2023-02-15 04:46 出处:网络
i\'m trying to use an IN statement to return results which match one of a list of st开发者_开发问答rings

i'm trying to use an IN statement to return results which match one of a list of st开发者_开发问答rings

for example

strings = ['string1', 'string2', 'string3'] c.execute('select count(*) from table where foo in ?', strings)

i know this is incorrect and doesnt work but i hope that it highlights what im trying to do...


You can't do that. There are three problems:

  • You can't have a table called table unless you use backticks around the table name.
  • An IN clause must have parentheses.
  • You want three parameters, not one.

Try this instead:

sql = 'SELECT COUNT(*) FROM yourtable WHERE foo IN (?, ?, ?)'

If the number of strings is variable, use this instead:

params = ','.join('?' for x in strings)
sql = 'SELECT COUNT(*) FROM yourtable WHERE foo IN (' + params + ')'


You can do a ','.join(strings) as @Mark Byers suggests, that works most times. However if the number of strings is very long it will fail because SQL queries have bounded length.

Another way of doing it is creating a temp table, inserting there all the strings and doing a join to perform the intersection, something like

c.execute('CREATE TEMP TABLE strings (s STRING)')
c.executemany('INSERT INTO strings (s) VALUES (?)', ((s,) for s in strings))
c.execute('SELECT COUNT(*) FROM table JOIN strings ON table.foo == strings.s')
0

精彩评论

暂无评论...
验证码 换一张
取 消