Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite查询中的python字符串替换_Python_Sqlite - Fatal编程技术网

sqlite查询中的python字符串替换

sqlite查询中的python字符串替换,python,sqlite,Python,Sqlite,我试图使用IN语句返回与字符串列表之一匹配的结果 比如说 strings=['string1','string2','string3'] c.execute('select count(*)from table where foo in?',strings) 我知道这是不正确的,不起作用,但我希望它能突出我想做的事情…你不能那样做。有三个问题: 除非在表名周围使用反勾号,否则不能有名为table的表 IN子句必须有括号 您需要三个参数,而不是一个 请尝试以下方法: sql = 'SELECT

我试图使用IN语句返回与字符串列表之一匹配的结果

比如说

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


我知道这是不正确的,不起作用,但我希望它能突出我想做的事情…

你不能那样做。有三个问题:

  • 除非在表名周围使用反勾号,否则不能有名为
    table
    的表
  • IN子句必须有括号
  • 您需要三个参数,而不是一个
请尝试以下方法:

sql = 'SELECT COUNT(*) FROM yourtable WHERE foo IN (?, ?, ?)'
params = ','.join('?' for x in strings)
sql = 'SELECT COUNT(*) FROM yourtable WHERE foo IN (' + params + ')'
如果字符串的数量是可变的,请改用:

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

您可以执行一个
,'.join(strings)
,正如@markbyers所建议的,这在大多数情况下都有效。但是,如果字符串数非常长,它将失败,因为SQL查询的长度是有界的

另一种方法是创建一个临时表,在其中插入所有字符串,并进行连接以执行交集,如

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')