当前位置: 首页 > 面试题库 >

在Python和sqlite中转义字符

庄兴发
2023-03-14
问题内容

我有一个python脚本,可将原始电影文本文件读入sqlite数据库。

我使用re.escape(title)将转义字符添加到字符串中,以使它们在执行插入操作之前是数据库安全的。

为什么这不起作用:

In [16]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='\'Allo\ \'Allo\!\"\ \(1982\)'")
--------------------------------------------------------------------------- OperationalError                       Traceback (most recent call last)

/home/rajat/Dropbox/amdb/<ipython console> in <module>()

OperationalError: near "Allo": syntax error

但这有效(在两个位置删除了'):

In [17]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='Allo\ Allo\!\"\ \(1982\)'") Out[17]: <sqlite3.Cursor object at 0x9666e90>

我不知道。我也不能放弃那些引号,因为它们实际上是电影标题的一部分。谢谢。


问题答案:

你这样做是错的。从字面上看。您应该使用如下参数:

c.execute("UPDATE movies SET rating = ? WHERE name = ?", (8.7, "'Allo 'Allo! (1982)"))

这样,您根本不需要执行 任何 引用,并且(如果这些值来自不受信任的任何人),您(在这里)也可以100%安全地免受SQL注入攻击。



 类似资料:
  • 问题内容: 考虑以下代码 问题在于,SQL语句中的引号没有被转义。如果我使用PHP编程,则在将字符串插入SQL查询之前,将使用sqlite_escape_string之类的函数对字符串进行转义,但是我似乎找不到C ++中的等效函数。我可以构建自己的sqlite_escape_string之类的函数,但我确定必须已经编写/测试了一个… C ++是否有sqlite_escape_string()等效函

  • 我有一个函数,它在SQLite数据库中的一个表上执行查询。我声明一个常量:。它存储在变量中(假设), 除此之外,它还适用于像这样的单个单词,我的意思是没有特殊字符word。 请给我解决问题的建议,谢谢。

  • 在《 Python字符串》一节中我们曾提到过转义字符,就是那些以反斜杠 开头的字符。 ASCII 编码为每个字符都分配了唯一的编号,称为编码值。在 Python 中,一个 ASCII 字符除了可以用它的实体(也就是真正的字符)表示,还可以用它的编码值表示。这种使用编码值来间接地表示字符的方式称为 转义字符(Escape Character)。 如果你对 ASCII 编码不了解,请猛击: ASCII

  • 问题内容: 我有一个Unicode转义的字符串: 我想将此字符串转换为unicode非转义版本 我该怎么做呢? 问题答案: 对其进行编码(使用任何编解码器,utf-8可能都可以),然后使用对其进行解码:

  • 我有一个统一码转义字符串: 我想将此字符串转换为unicode未转义的版本 我该怎么做?

  • 问题内容: 我有一个想要大括号的字符串,但也可以利用f字符串功能。是否有一些适用于此的语法? 这有两种无效的方法。我想将文字文本“ ”作为字符串的一部分。 NameError:未定义名称“栏” 语法错误:f字符串表达式部分不能包含反斜杠 所需结果: 编辑:看起来这个问题与我如何在python字符串中打印文字大括号字符并在其上使用.format有相同的答案?,但只有在知道format函数使用与f字符