我正在尝试制作一个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:UserssamueProjectscbproV2> & 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:UserssamueProjectscbproV2main.py", line 5, in <module>
database.investement_update(2.2)
File "c:UserssamueProjectscbproV2database.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:UserssamueProjectscbproV2> & 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:UserssamueProjectscbproV2main.py", line 5, in <module>
database.investement_update(2.2)
File "c:UserssamueProjectscbproV2database.py", line 65, in investement_update
c.execute("UPDATE money_tracker SET invested_money = '?'", (new))
ValueError: parameters are of unsupported type
PS C:UserssamueProjectscbproV2>
去掉参数占位符周围的圆括号和引号,例如:
".. SET invested_money = ?"
包含引号将其转换为SQL字符串字面值(值为'?",如。提供的值是(不是无意使用的),不需要括号。
同时,确保传递一个元组。对于单个参数,必须写成(x,)
,如下所示:
c.execute(".. = ?", (new,))
参见如何创建只有一个元素的元组。