Python执行SQLite参数化查询时数值变量需转字符串,求无需转换方案
问题解决:SQLite参数查询中直接使用实数变量的方法
你的问题根本原因不是实数类型无法直接使用,而是参数传递的格式错误:你传给cursor.execute的参数不是元组(或序列类型)。Python里(realNumber)只是括号包裹的单个变量,不是元组,必须加个尾逗号才能定义单个元素的元组,或者改用列表传递参数。
修正后的代码如下(关键处已标注):
from tkinter import* import tkinter as tk from tkinter import ttk import sqlite3 realNumber = 2.0 database = sqlite3.connect('NumDB.db') cursor = database.cursor() # 给参数加尾逗号,将单个变量转为元组 cursor.execute("SELECT numColumn from numTable WHERE realNumber=?", (realNumber,)) # 也可以用列表传递:cursor.execute(..., [realNumber]) results = cursor.fetchall() print(results) cursor.close() database.close()
这样修改后,就能直接用实数变量执行查询,不需要转成字符串。SQLite的参数化查询会自动处理Python类型与SQLite字段类型的匹配,Python的float会对应到SQLite的real类型,完全符合你的数据库字段定义。
你之前用字符串能成功,是因为SQLite做了隐式类型转换,但这种做法不规范,可能在复杂场景下引发类型匹配问题,直接使用对应类型的变量才是正确的做法。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

