sqlite3.OperationalError: no such column错误原因求助
解决sqlite3.OperationalError: no such column错误
嘿,我一眼就看出问题出在哪了——你在执行INSERT语句的时候用了字符串拼接的方式插入值,这会让SQL把你的文本类型数据当成列名来解析!
举个例子,如果你的银行账户名是My Savings,那你拼接出来的SQL语句会变成:
INSERT INTO Bank VALUES (My Savings, 1000)
SQL会把My当成一个列名,但你的Bank表里根本没有这个列,自然就抛出no such column的错误了,而且文本值没加引号,完全不符合SQL的语法规范。
正确的做法:用参数化查询
sqlite3支持使用占位符?来传递参数,这样不仅能避免语法错误,还能防止SQL注入风险,一举两得。把你代码里的INSERT语句改成下面这样:
cur.execute("INSERT INTO Bank VALUES (?, ?)", (bankaccount, starting_money))
这里的?会自动帮你处理不同数据类型的格式问题,比如给文本值加上引号,数字则保持原样,完美解决你的报错问题。
另外顺便提一句:你的代码里在判断用户文件存在时直接调用了main_loop(),但此时还没检查数据库里是否存在Bank表,如果用户的数据库文件里没有这个表,后续操作也会报错,这个地方可以考虑加个表存在性检查的逻辑哦。
内容的提问来源于stack exchange,提问作者user8558694
相关产品推荐
相关产品推荐

