在sqlite3更新查询中打印int变量

时间:2016-09-14 17:39:53

标签: python sqlite

我试图更新一个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条目?

2 个答案:

答案 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]`)