我有一个大型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/