我试图在我最新的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
为什么它会抛出错误并指示我试图访问不存在的列?提前谢谢。
答案 0 :(得分:4)
您必须使用"
或类似内容包围您的值。你目前正在做的是另外,非常糟糕的代码,可能会导致一些严重的SQL注入问题。
作为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包装器会将值包含在"
之类的必要字符中。
额外提示:似乎您希望以明文形式存储密码。你应该避免这种情况,并使用像PBKDF2这样的哈希方法。