Python sqlite3报no such column:website错误但列实际存在求解
错误原因
- 列名误用单引号包裹:SQL语法中,单引号用于标记字符串字面量,你在INSERT语句中给
website、username等列名加了单引号,数据库不会将其识别为表的字段。 - 错误的变量传入方式:你直接把Python侧定义的变量名
website、username等写在了SQL的VALUES子句中,数据库会将这些内容识别为要查找的列名,自然找不到对应字段就抛出错误。同时这种写法也存在SQL注入的安全风险。
修复方案
只需要修改create_account函数中的INSERT语句写法即可,调整后代码如下:
def create_account(): website = input("\nEnter Website: ") username = input("Enter Username: ") email = input("Enter Email: ") password = input("Enter Password: ") database_cursor.execute( """ INSERT INTO accounts (website, username, email, password) VALUES (?, ?, ?, ?) """, (website, username, email, password) )
修改点说明:
- 去掉了列名外侧的单引号
- VALUES子句中使用
?作为参数占位符 - 把要插入的变量以元组的形式,作为
execute方法的第二个参数传入
修改完成后如果运行仍有问题,可以先删除本地已生成的accounts.db文件,再重新运行代码,避免之前错误操作生成的旧表结构产生影响。
内容的提问来源于stack exchange,提问作者Christian Cole
相关产品推荐
相关产品推荐

