首页 > 解决方案 > 如何使用 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> 

标签: pythonsqlite

解决方案


删除参数占位符周围的括号引号,例如:

 ".. SET invested_money = ?"

包含引号会在不知不觉中将其转换为 SQL 字符串文字(具有'?' 的值,例如未使用提供的值并且不需要括号。

另外,确保传递一个元组。对于单个参数,它必须这样写(x,)

c.execute(".. = ?", (new,))

有关详细信息,请参阅如何创建只有一个元素的元组


推荐阅读