python - 插入sqlite db-python

标签 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

为什么会抛出错误并指示 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/

相关文章:

mysql - 当我用完一个 bigint 生成的 key 时会发生什么?如何处理?

python - 如何根据插入的内容确定 SQL 列值的优先级?

SQL 服务器 : Nesting Elements with FOR XML PATH

mysql - 解释我没有编写的复杂查询的选择输出

sql - 如何查询当前SQL Server数据库实例的名称?

python - Pandas 数据框与分配给特定值的重复项合并

python - 使用递归将字符串拆分为 block

python - 使用python收到错误后如何继续请求库功能?

python - 检查具有不同属性的对象是否相等

database - playframework: -- 数据库/测试框架/缓存错误