从sqlite表中选择使用python sqlite3的列表中的rowid - DB-API 2.0

Nav*_*een 19 python sqlite

以下作品:

>>> cursor.execute("select * from sqlitetable where rowid in (2,3);")
Run Code Online (Sandbox Code Playgroud)

以下不是:

>>> cursor.execute("select * from sqlitetable where rowid in (?) ", [[2,3]] )
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
Run Code Online (Sandbox Code Playgroud)

有没有办法传入python列表而不必先将其格式化为字符串?

unu*_*tbu 31

不幸的是.每个值必须有自己的参数mark(?).由于参数列表可以(可能)具有任意长度,因此必须使用字符串格式化来构建正确数量的参数标记.令人高兴的是,这并不是那么难:

args=[2,3]
sql="select * from sqlitetable where rowid in ({seq})".format(
    seq=','.join(['?']*len(args)))

cursor.execute(sql, args)
Run Code Online (Sandbox Code Playgroud)

  • 由于这个答案是5岁......这仍然有效吗?pysqlite是否仍然不支持列表中的"IN"? (6认同)
  • args应该始终是参数的列表或元组。参数可能是字符串,但是'args'本身不会。 (2认同)

Bru*_*len 5

在Python 3.6中,您还可以使用f字符串构建查询:

args=[2, 3]
query = f"SELECT * FROM sqlitetable WHERE rowid in ({','.join(['?']*len(args))})"
cursor.execute(query, args)
Run Code Online (Sandbox Code Playgroud)

  • 如果你想使用命名参数怎么办? (3认同)