我有一个大型SQLite数据库,其中包含文本和许多其他列var1 ... var 50的混合。其中大多数是数字的,尽管有些是基于文本的。

我试图从数据库中提取数据,在python中进行处理并将其写回-我需要对数据库中的所有行执行此操作。

到目前为止,以下工作类型:

# get row using select and process
fields = (','.join(keys)) # "var1, var2, var3 ... var50"
results = ','.join([results[key] for key in keys]) # "value for var1, ... value for var50"
cur.execute('INSERT OR REPLACE INTO results (id, %s) VALUES (%s, %s);' %(fields, id, results))


但是,这会使我没有明确添加回的列为空。我可以通过重新编写代码来解决此问题,但这感觉很混乱,因为我必须使用字符串连接来用引号引起来并重写开始时的数据(即我没有更改的列)。

显然,在行上运行更新的方式是这样的:

update table set var1 = 4, var2 = 5, var3="some text" where id = 666;


大概对我来说,方法是运行map,并以某种方式添加=符号(不确定如何),但是我将如何适当地引用所有结果(因为我必须引用文本字段,所以它们也可能在其中包含引号..)?

我有点困惑。任何指针将非常有帮助。

谢谢!

最佳答案

正如其他人所强调的那样,请使用参数化的参数。这是一个示例,说明如何在键数可变的情况下构造SQL语句:

sql=('UPDATE results SET '
     + ', '.join(key+' = ?' for key in keys)
     + 'WHERE id = ?')
args = [results[key] for key in keys] + [id]
cur.execute(sql,args)

关于python - SQLite数据库,多行更新:处理文本和浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3343565/

10-11 05:22
查看更多