您正在使用一个id(而不是一个id列表)在元组上循环:((1424794931452.0,), (1424794931645.0,), (1424794931821.0,), (1424794932014.0,), (1424794932189.0,)
因此每个i都被设置为其中一个元组。通过使用索引或在for循环赋值中添加逗号来提取标识:
^{pr2}$
或者for i, in data:
dt = datetime.fromtimestamp(i // 1000)
s = dt.strftime('%Y-%m-%d %H:%M:%S')
sql2 = "UPDATE accelerometer SET test = " + s + "WHERE _id=" + i
cursor.execute(sql2)
您应该在这里真正使用SQL参数而不是字符串连接;然后可以重用SQL语句:sql2 = "UPDATE accelerometer SET test = ? WHERE _id=?"
for i, in data:
dt = datetime.fromtimestamp(i // 1000)
cursor.execute(sql2, (i, dt))
在这里我做了两个假设:您的数据库驱动程序使用?作为占位符语法(可以改为%s),并且它本机支持datetime对象(现在大多数都可以),所以您不需要先使用datetime.strftime()来生成字符串。在
语句重用可以更进一步,因为数据库只需解析一次查询,并且只需生成一个查询计划;这加快了重复执行的速度。在
使用SQL参数还有另一个非常重要的优点:它可以防止SQL注入攻击(攻击者添加引号和其他SQL语句)。对于你的具体意见,这不是一个太大的问题,但应始终牢记在心。在