我正在尝试在我最新的 python 程序中使用 SQLite 数据库。我正在尝试使用 insert 向我的数据库中插入一个新行。数据库的列设置为:
0|pw|TEXT|0||0
1|Name|TEXT|0||0
2|dataBaseID|INT|0||0
3|email|TEXT|0||0
我的 python 代码是:
this = "INSERT INTO users (pw, name, dataBaseID, email)"
this += " VALUES ("+passWord+", "+UserName+", "+"1"+", "+email+")"
print(this)
cur.execute(this)
dbCon.commit()
错误是:
Traceback (most recent call last):
File "/usr/lib/python3.2/multiprocessing/process.py", line 267, in _bootstrap
self.run()
File "/usr/lib/python3.2/multiprocessing/process.py", line 116, in run
self._target(*self._args, **self._kwargs)
File "serverBackend.py", line 85, in main
add(msg,cur,databaseConnection,connect)
File "serverBackend.py", line 20, in add
cur.execute(this)
sqlite3.OperationalError: no such column: Chips1994
为什么会抛出错误并指示 Im 试图访问不存在的列?提前致谢。
最佳答案
您必须用 "
或类似的东西包围您的值。此外,您目前正在做的是非常糟糕的代码,可能会导致一些严重的 sql 注入(inject)问题。
作为stated in the official python-sqlite 3 documentation , 你应该使用占位符。
将您当前的代码替换为
query = "INSERT INTO users (pw, name, dataBaseID, email) VALUES (?, ?, ?, ?)"
cur.execute(query, (passWord, UserName, 1, email))
cur.commit()
使用占位符 ?
,sql wrapper 将注意用必要的字符包围值,例如 "
。
额外提示:您似乎想以明文形式存储密码。您应该避免这种情况并使用一些哈希方法,例如 PBKDF2。
关于python - 插入sqlite db-python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24663389/