插入到sqlite db-python中

时间:2014-07-09 20:39:51

标签: python sql database sqlite

我试图在我最新的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

为什么它会抛出错误并指示我试图访问不存在的列?提前谢谢。

1 个答案:

答案 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这样的哈希方法。