![](/img/trans.png)
[英]Using parameters in a CREATE TABLE … (column DEFAULT ?) clause, in Python sqlite3 db-api
[英]select from sqlite table where rowid in list using python sqlite3 — DB-API 2.0
以下作品:
>>> cursor.execute("select * from sqlitetable where rowid in (2,3);")
以下不是:
>>> cursor.execute("select * from sqlitetable where rowid in (?) ", [[2,3]] )
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
有沒有辦法傳入python列表而不必先將其格式化為字符串?
不幸的是。 每個值必須有自己的參數標記( ?
)。 由於參數列表可以(可能)具有任意長度,因此必須使用字符串格式化來構建正確數量的參數標記。 令人高興的是,這並不是那么難:
args=[2,3]
sql="select * from sqlitetable where rowid in ({seq})".format(
seq=','.join(['?']*len(args)))
cursor.execute(sql, args)
在Python 3.6中,您還可以使用f字符串構建查詢:
args=[2, 3]
query = f"SELECT * FROM sqlitetable WHERE rowid in ({','.join(['?']*len(args))})"
cursor.execute(query, args)
SQLite本身僅支持TEXT,INTEGER,REAL,BLOB和NULL類型。 如果您想使用其他類型,您必須自己添加對它們的支持。 detect_types參數和使用模塊級register_converter()函數注冊的自定義轉換器允許您輕松地執行此操作。
如前所述,SQLite本身僅支持一組有限的類型。
要在SQLite中使用其他Python類型,必須使它們適應SQLite的sqlite3模塊支持的類型之一:NoneType,int,float,str,bytes之一。
讓ids_list
成為所需行ID的列表,一個簡單的解決方案是:
sql = "SELECT * FROM sqlitetable WHERE rowid IN {}".format(str(tuple(ids_list)
cursor.execute(sql)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.