我在python 3.5中使用来自 SQLite3 的输入来将用户信息添加到数据库。但是,一旦我获取数据并插入数据库,而不是将数据插入列中,它告诉我没有列。 我得到的错误如下:
Tkinter回调中的异常 回溯(最近一次调用最后一次):
文件 " C:\ Users \ Luke_2 \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ tkinter__init __。py",第1549行,调用 return self.func(* args)File" C:\ Users \ Luke_2 \ Desktop \ Computing \ Coursework \ live \ current.py",line 303,详细说明 cur_user.execute(" INSERT INTO LogIn(Email,Password)VALUES(" + user +"," + passw +")")sqlite3.OperationalError :没有这样的专栏: 一个
我的代码中的函数如下:
def details():
user = email_sign.get()
user1 = email1_sign.get()
passw = password_sign.get()
password1 = password1_sign.get()
if user == user1 and passw == password1:
cur_user.execute("INSERT INTO LogIn(Email,Password) VALUES("+user+","+passw+")")
conn_user.commit()
else:
print("please try again")
答案 0 :(得分:3)
这是因为您实际执行的请求在值周围没有引号,因此名称被解释为列名但SQL引擎。如果您分别通过a
和b
,则会执行
INSERT INTO LogIn(Email,Password) VALUES(a,b)
什么时候需要
INSERT INTO LogIn(Email,Password) VALUES('a','b')
但你应该从不到那个!几十年来,在请求中构建请求但硬编码参数一直是SQL injection问题的原因。
正确的方法是建立一个参数化的请求:
cur_user.execute("INSERT INTO LogIn(Email,Password) VALUES(?,?)", (user, password))
更简单,更智能且不受SQL注入...