gpt4 book ai didi

python - SQLite3 参数格式化问题 - 通过添加另一个值来更新现有值

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:34 24 4
gpt4 key购买 nike

我目前正在学习如何在 Python 中使用 sqlite3 模块。我正在尝试编写代码,通过向现有值添加新值来更新 sqlite 中列中的值,但我遇到了我不知道如何修复的格式问题...

我知道执行此操作的基本语法(据我所知)如下:

sql_statement = "UPDATE table 
SET column_name = column_name + new_value
WHERE condition;"

我遇到的问题是我试图使用 python 中的字典参数插入列名。这是我的代码中出现问题的地方:

muscle = 'Lats'
num_sets = 5
week_num = 40

sql_statement = f"UPDATE WeeklyMuscleSets
SET {muscle} = (:muscle) + (:num_sets)
WHERE WeekID = (:week_num);"

parameters = {'muscle':muscle,'num_sets':num_sets,'week_num':week_num}

c.execute(sql_statement,parameters)

代码运行得很好,但不是添加到表中的现有值,而是替换它。我做了一些测试,当我手动输入“muscle”变量的值时,它更新得很好。

muscle = 'Lats'
num_sets = 5
week_num = 40

sql_statement = f"UPDATE WeeklyMuscleSets
SET {muscle} = Lats + (:num_sets)
WHERE WeekID = (:week_num);"

parameters = {'num_sets':num_sets,'week_num':week_num}

c.execute(sql_statement,parameters)

当我对肌肉变量使用 f 字符串格式时,它也有效,但我知道这是不好的做法,并且会使代码容易受到注入(inject)攻击。

由于某种原因,当我使用参数时,它不会将新值添加到现有值中,而是替换它,我不知道为什么。非常感谢任何对此的帮助!

最佳答案

这是参数化查询。然后,查询和值分别发送到 DBMS 引擎,DBMS 使用已解析查询中的值。然后将解析后的查询存储并再次使用,从而提高性能并且不会发生SQL注入(inject)。

如果您想将 num_sets 添加到 muscle 的当前值,则必须使用 muscle + :num_sets :

num_sets = 5
week_num = 40

sql_statement = f"UPDATE WeeklyMuscleSets
SET muscle = muscle + :num_sets
WHERE WeekID = :week_num;"

parameters = {'num_sets':num_sets,'week_num':week_num}

c.execute(sql_statement,parameters)

关于python - SQLite3 参数格式化问题 - 通过添加另一个值来更新现有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58187158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com