python - 如何使用 python 将浮点数插入 SQLite 数据库中的实际位置?
问题描述
我正在尝试制作一个 python 程序,该程序可以使用 SQLite 数据库跟踪一段时间内花费的总金额,以跟踪运行总额。
现在,我有
def investement_update(a):
conn = sqlite3.connect('trades.db')
c = conn.cursor()
c.execute("SELECT * FROM money_tracker")
old = c.fetchone()[0]
print(old)
new = old + a
print(new)
print(type(new))
str(new)
c.execute("UPDATE money_tracker SET invested_money = ('?')", (new))
print('asfdad')
conn.commit()
conn.close()
但是,这会不断抛出错误
PS C:\Users\samue\Projects\cbpro\V2> & C:/Users/samue/AppData/Local/Microsoft/WindowsApps/python3.9.exe c:/Users/samue/Projects/cbpro/V2/main.py
2.0
4.2
<class 'float'>
Traceback (most recent call last):
File "c:\Users\samue\Projects\cbpro\V2\main.py", line 5, in <module>
database.investement_update(2.2)
File "c:\Users\samue\Projects\cbpro\V2\database.py", line 65, in investement_update
c.execute("UPDATE money_tracker SET invested_money = ('?')", (new))
ValueError: parameters are of unsupported type
我不确定如何修复此错误,我尝试将其设为字符串(现在列出的内容)我尝试将其作为 int、float 放入,所有这些都返回此错误. 但是,如果我对编辑进行硬编码,它会完美运行。
编辑
我尝试删除占位符周围的括号和引号,但仍然得到相同的错误。
def investement_update(a):
conn = sqlite3.connect('trades.db')
c = conn.cursor()
c.execute("SELECT * FROM money_tracker")
old = c.fetchone()[0]
print(old)
new = old + a
print(new)
print(type(new))
str(new)
c.execute("UPDATE money_tracker SET invested_money = ?", (new))
print('asfdad')
conn.commit()
conn.close()
PS C:\Users\samue\Projects\cbpro\V2> & C:/Users/samue/AppData/Local/Microsoft/WindowsApps/python3.9.exe c:/Users/samue/Projects/cbpro/V2/main.py
2.0
4.2
<class 'float'>
Traceback (most recent call last):
File "c:\Users\samue\Projects\cbpro\V2\main.py", line 5, in <module>
database.investement_update(2.2)
File "c:\Users\samue\Projects\cbpro\V2\database.py", line 65, in investement_update
c.execute("UPDATE money_tracker SET invested_money = '?'", (new))
ValueError: parameters are of unsupported type
PS C:\Users\samue\Projects\cbpro\V2>
解决方案
删除参数占位符周围的括号和引号,例如:
".. SET invested_money = ?"
包含引号会在不知不觉中将其转换为 SQL 字符串文字(具有'?' 的值,例如未使用提供的值),并且不需要括号。
另外,确保传递一个元组。对于单个参数,它必须这样写(x,)
:
c.execute(".. = ?", (new,))
有关详细信息,请参阅如何创建只有一个元素的元组。
推荐阅读
- r - 尝试使用 rnorm 函数模拟数据集时遇到语法错误
- android - 视图绑定无权访问片段
- linux - 我在使用 bochs+gdb 调试 linux-0.11 时遇到了一些问题
- bash - Terraform GCP 实例元数据启动脚本问题
- python-3.x - 无法在 leetcode 每周竞赛 243 中提出的“使用服务器处理任务”问题中找到边缘案例
- python - 错误:“NoneType”和“int”的实例之间不支持“>”
- amazon-web-services - 为什么我的 AWS S3 对象计数不同
- python-3.x - 有没有办法使用python从文本文件中只提取特定的行
- reactjs - tfjs-react-native 用于实时对象检测(expo 托管工作流)
- sql-server-2012 - 将默认值设置为日期时间列中的当前日期时间,插入时不应接受除当前日期时间之外的其他日期时间