我试图更新一个sqlite3 db,一旦我得到一个真实的语句,但我不能将我的变量,这是一个int,提供给一个str的查询。 这是数据库
tuple
这是代码
# Only difference is sorting nonuniq before grouping
uniq = [k for k, g in itertools.groupby(sorted(nonuniq))]
# uniq is [('769817', [6]), ('769819', [4, 10])]
row [0]是db中的id,它是一个int。当我运行代码时,我得到了这个:
CREATE TABLE STATICIPS(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
IP CHAR(50) NOT NULL,
CITY CHAR(50) NOT NULL,
INCOMPLETE BOOL
, CMTSIP CHAR(50));
所以我的问题是如何在我的查询中正确打印行[0],以便更新此特定ID的sqlite条目?
答案 0 :(得分:1)
构造SQL查询时,根本不要使用连接。请改用 SQL参数。这些是查询中的占位符,数据库将为您填充值。
这可确保正确转义这些值(避免SQL注入攻击),并允许数据库重用不同值的查询(从而提高性能)。
在sqlite3
中,占位符是问号;您将序列中的值作为第二个参数传递给execute()
:
conn.execute("UPDATE STATICIPS set INCOMPLETE = 0 where ID = ?",
[row[0]])
对于常规情况(因此不使用SQL查询),您首先要将该整数值转换为字符串。使用str(row[0])
或使用str.format()
字符串模板。
答案 1 :(得分:-1)
你需要利用反引号。
conn.execute("UPDATE STATICIPS set INCOMPLETE = 0 where ID = " + `row[0]`)