Python Sqlite3数据库表未更新

伊格内尔32

我正在为网站创建一个更改密码页面,该页面要求新密码和当前密码。使用scrypt库对旧密码进行散列和加盐处理,然后将其与sqlite3数据库中存储的密码进行比较,如果匹配,则对新密码进行散列并更新数据库。但是我在执行更新命令时遇到了困难,因为它引发了sqlite3.OperationalError:无法识别的令牌:“ \”错误。execute语句当前具有以下代码:

c.execute("UPDATE users SET password = \'{0}\' WHERE memberID = \'{1}\'".format(newPas, memID))

最初,我们认为该错误是由于在新密码本身中由于存在'而在字符串格式中使用'引起的,因此再次将其运行为:

c.execute("UPDATE users SET password = \"{0}\" WHERE memberID = \"{1}\"".format(newPas, memID))

这可以成功运行,但实际上不会更改数据库中的任何内容。我们还尝试创建一个查询字符串,然后执行该字符串。

query = "UPDATE users SET password = {0} WHERE memberID = {1}".format(newPas, memID)
c.execute(query)

这导致了sqlite3.OperationalError:“'\ xa1 \ x91 \ x9f \ x88 \ xfb \ x81 \ x12 \ xd4 \ xc2 \ xf9 \ xce \ x91y \ xf0 / \ xe1 *#\ x8aj \ xc7 \ x1d \ xd3 \ x91 \ x14 \ xcb \ xa4 \ xabaP [\ x02 \ x1d \ x1b \ xabr \ xc7 \ xe4 \ xee \ x19 \ x80c \ x8e | \ xc0S \ xaaX \ xc6 \ x04 \ xab \ x08 \ x9b \ x8e \ xd7zB \ xc6 \ x84 [\ xfb \ xbc \ x8d \ xfc'“:语法错误。我相信这是由于密码中存在'和'字符引起的,但是我不确定如何解决此问题,因为这些是由哈希过程添加的,因此删除它们会更改密码。要添加的是:

b'\xa1\x91\x9f\x88\xfb\x81\x12\xd4\xc2\xf9\xce\x91y\xf0/\xe1*#\x8aj\xc7\x1d\xd3\x91\x14\xcb\xa4\xabaP[\x02\x1d\x1b\xabr\xc7\xe4\xee\x19\x80c\x8e|\xc0S\xaaX\xc6\x04\xab\x08\x9b\x8e\xd7zB\xc6\x84[\xfb\xbc\x8d\xfc'

我想知道是否有人可以分享一些为什么它不喜欢“ \”字符或为什么它不更新数据库的见解,并指出正确的方向来使其工作。如果您需要更多信息或代码段,或者只是想对我大吼大叫,请不要犹豫!先感谢您 :)

罗根乔希

您的代码有两件事:

  1. 您不应该使用这种方式format来构建查询。这使您易于进行SQL注入,尽管在这种情况下您可能需要清理输入内容,但是这是一个会咬伤您的坏习惯。
  2. 所有更改都必须提交给数据库才能真正生效。这就是为什么第二个查询没有引发错误,但是同样没有对数据库进行任何更改的原因。

该查询的正确格式为:

conn = sqlite3.connect('my_db.db')
c = conn.cursor()

query = "UPDATE users SET password = ? WHERE memberID = ?"
c.execute(query, (newPas, memID))

conn.commit() # To finalise the alteration

附带说明一下,在这种情况下,游标需要一个元组,因此在传递单个值时会遇到一个常见的绊脚石:

query = "UPDATE users SET password = ? WHERE memberID = 'abc'"
c.execute(query, (newPas)) # Throws "incorrect number of bindings" error

# Use this instead i.e. pass single value as a tuple
c.execute(query, (newPas,))

您可以用来format在查询中创建变量字段名称,因为在这种情况下不允许使用占位符:

fields = ['a', 'b', 'c']

query = "UPDATE users SET {} = ?".format(random.choice(fields))

除了使用它来帮助您构建大型查询之外,在这些查询中手动键入所有占位符会很繁琐,并且如果代码更改,则很难确保您拥有正确的数字:

my_list = ['a', 'b',...., n]
placeholders = ', '.join(['?' for item in my_list])

query = "INSERT .... VALUES = ({})".format(placeholders)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python数据库sqlite3

来自分类Dev

使用`executemany`更新现有SQLite3数据库中的条目(使用Python sqlite3)

来自分类Dev

Python sqlite3'executemany'无法成功更新我的数据库

来自分类Dev

在 Python/SQLite3 中,如何定义用于查询数据库表的变量?

来自分类Dev

如何将变量插入到数据库表 sqlite3 - Python

来自分类Dev

在Python中从sqlite3数据库写入CSV

来自分类Dev

在Python中从sqlite3数据库写入CSV

来自分类Dev

Python Sqlite3 附加到内存数据库

来自分类Dev

Python:使用 SQlite3 数据库中的数据在 Tkinter 中构建条形图

来自分类Dev

Python 和 SQLite3 - 将数据导入现有数据库

来自分类Dev

SQLite3 + Python3-使用外键创建数据库

来自分类Dev

python数据库请求未更新

来自分类Dev

如何检查Python是否连接了SQLite3数据库?

来自分类Dev

如何在Python中获得到加密数据库的SQLite3连接

来自分类Dev

仅使用python将csv文件中的特定行插入Sqlite3数据库

来自分类Dev

Python sqlite3:两个数据库中表的差异

来自分类Dev

如何在python中删除sqlite3数据库?

来自分类Dev

如何使用python在sqlite3数据库中存储0.2值

来自分类Dev

如何通过python将记录插入SQLite3数据库?

来自分类Dev

使用Python将图像从sqlite3数据库显示到QTableWidget中的列

来自分类Dev

使用Python确定用户名是否在SQLite3数据库中

来自分类Dev

无法使用sqlite3在磁盘上保存数据库-Python

来自分类Dev

Python sqlite3:两个数据库中表的差异

来自分类Dev

如何在python中使用sqlite3创建数据库

来自分类Dev

Python Web服务器脚本不会提交到sqlite3数据库

来自分类Dev

Python在Flask本地网站上显示SQLite3数据库记录

来自分类Dev

索引列表中的列表以创建数据库列sqlite3 python时出错

来自分类Dev

如何使用 Python 将日期时间插入到 sqlite3 数据库中?

来自分类Dev

Python SQLite3,表格未显示更新

Related 相关文章

  1. 1

    Python数据库sqlite3

  2. 2

    使用`executemany`更新现有SQLite3数据库中的条目(使用Python sqlite3)

  3. 3

    Python sqlite3'executemany'无法成功更新我的数据库

  4. 4

    在 Python/SQLite3 中,如何定义用于查询数据库表的变量?

  5. 5

    如何将变量插入到数据库表 sqlite3 - Python

  6. 6

    在Python中从sqlite3数据库写入CSV

  7. 7

    在Python中从sqlite3数据库写入CSV

  8. 8

    Python Sqlite3 附加到内存数据库

  9. 9

    Python:使用 SQlite3 数据库中的数据在 Tkinter 中构建条形图

  10. 10

    Python 和 SQLite3 - 将数据导入现有数据库

  11. 11

    SQLite3 + Python3-使用外键创建数据库

  12. 12

    python数据库请求未更新

  13. 13

    如何检查Python是否连接了SQLite3数据库?

  14. 14

    如何在Python中获得到加密数据库的SQLite3连接

  15. 15

    仅使用python将csv文件中的特定行插入Sqlite3数据库

  16. 16

    Python sqlite3:两个数据库中表的差异

  17. 17

    如何在python中删除sqlite3数据库?

  18. 18

    如何使用python在sqlite3数据库中存储0.2值

  19. 19

    如何通过python将记录插入SQLite3数据库?

  20. 20

    使用Python将图像从sqlite3数据库显示到QTableWidget中的列

  21. 21

    使用Python确定用户名是否在SQLite3数据库中

  22. 22

    无法使用sqlite3在磁盘上保存数据库-Python

  23. 23

    Python sqlite3:两个数据库中表的差异

  24. 24

    如何在python中使用sqlite3创建数据库

  25. 25

    Python Web服务器脚本不会提交到sqlite3数据库

  26. 26

    Python在Flask本地网站上显示SQLite3数据库记录

  27. 27

    索引列表中的列表以创建数据库列sqlite3 python时出错

  28. 28

    如何使用 Python 将日期时间插入到 sqlite3 数据库中?

  29. 29

    Python SQLite3,表格未显示更新

热门标签

归档