GVKun编程网logo

在Python和sqlite中转义字符(python数据库特殊字符转义)

13

本文的目的是介绍在Python和sqlite中转义字符的详细情况,特别关注python数据库特殊字符转义的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在Python

本文的目的是介绍在Python和sqlite中转义字符的详细情况,特别关注python数据库特殊字符转义的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在Python和sqlite中转义字符的机会,同时也不会遗漏关于For循环或executemany-Python和SQLite3、Python 转义字符、python 转义字符\、python中转义字符是什么意思的知识。

本文目录一览:

在Python和sqlite中转义字符(python数据库特殊字符转义)

在Python和sqlite中转义字符(python数据库特殊字符转义)

我有一个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>

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

答案1

小编典典

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

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

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

For循环或executemany-Python和SQLite3

For循环或executemany-Python和SQLite3

我最近开始学习Python和SQL,并有一个问题。

将Python与SQLite3结合使用,我编写了以下代码:

# Use sqlite3 in the fileimport sqlite3# Create people.db if it doesn''t exist or connect to it if it does existwith sqlite3.connect("people.db") as connection:    c = connection.cursor()    # Create new table called people    c.execute("""CREATE TABLE IF NOT EXISTS people(firstname TEXT, lastname TEXT, age INT, occupation TEXT)""")    people_list = [        (''Simon'', ''Doe'', 20, ''Python Master''),        (''John'', ''Doe'', 50, ''Java Master''),        (''Jane'', ''Doe'', 30, ''C++ Master''),        (''Smelly'', ''Doe'', 2, ''Shower Master'')    ]    # Insert dummy data into the table    c.executemany("""INSERT INTO people(firstname, lastname, age, occupation) VALUES(?, ?, ?, ?)""", people_list)

我注意到我可以使用for循环而不是executemany来做同样的事情:

# Use sqlite3 in the fileimport sqlite3# Create people.db if it doesn''t exist or connect to it if it does existwith sqlite3.connect("people.db") as connection:    c = connection.cursor()# Create new table called peoplec.execute("""CREATE TABLE IF NOT EXISTS people(firstname TEXT, lastname TEXT, age INT, occupation TEXT)""")people_list = [    (''Simon'', ''Doe'', 20, ''Python Master''),    (''John'', ''Doe'', 50, ''Java Master''),    (''Jane'', ''Doe'', 30, ''C++ Master''),    (''Smelly'', ''Doe'', 2, ''Shower Master'')]# Insert dummy data into the tablefor person in people_list:    c.execute("""INSERT INTO people(firstname, lastname, age, occupation) VALUES(?, ?, ?, ?)""", person)

我只是想知道哪个更有效,更经常使用?

答案1

小编典典

批处理插入executemany会更有效,并且随着记录数量的增加,性能差异通常会很大。执行insert语句会产生大量开销,如果您一次插入一行,则会一遍又一遍地产生该开销。

只要简单易行,就应该选择批处理插入。

在某些情况下,编写一次插入
一行的算法可能要简单得多。例如,如果您一次从某处接收数据,则在获取数据
时仅插入它可能会更简单,而不是
在保存大量
数据时先建立列表并进行一次插入。在这种情况下,您需要考虑性能
和代码简单性之间的权衡。通常最好从简单的
方法开始(一次插入一行),然后仅
在发现其性能不佳时才对其他内容进行优化。

Python 转义字符

Python 转义字符

什么是转义字符呢?

就是反斜杠+想要实现的转义功能的首字母

为什么需要转义字符?

当字符串中包含反斜杠、单引号和双引号等有特殊用途的字符时,必须使用反斜杠对这这些字符进行转义(转换一个含义)

反斜杠: \
单引号:’
双引号:"

当字符串包含换行、回车,水平制表符或退格等无法直接
表示的特殊字符时,也可以使用转义字符当字符串中包含
换行.
 
回车、水平制表符或退格等无法直接表示的特殊字符时,
也可以使用转义字符

换行:\n (newline)
回车:"\r (return)
水平制表符:\t(tab)
退格:\b (backspace)

示例

#转义字符
print('hollo\nworld')#\ +转义功能的首字母  n——>newline的首字母符表示换行

print('hollo\tworld')#\t一个制表符的位置
print("hollooo\tworld")

print('hollo\rworld')#world将hollo进行了覆盖

print("hollo\bworld")#\b是退一个格,将o退没了


print('http:\\\\www.baidu.com')#   \w中w不是实现转义功能的首字母
print('老师好:\'大家好\'')# \'实现单引号的意义

#原字符, 不希望字符串中的转义字符起作用,就使用原字符,就是在字符串之前加上r,或R
print(r'hello\nworld')

#注意事项,最后一个字符不能是反斜杠
print(r'hello\nworld')

python 转义字符\

python 转义字符\

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\。

>>>print(''I\''m ok.'')
I''m ok.
>>> print(''I\''m learning\nPython.'')
I''m learning
Python.
>>> print(''\\\n\\'')
\
\

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''''表示''''内部的字符串默认不转义,可以自己试试:

>>> print(''\\\t\\'')
\       \
>>> print(r''\\\t\\'')
\\\t\\

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用''''''...''''''的格式表示多行内容,可以自己试试:

>>> print(''''''line1
... line2
... line3'''''')
line1
line2
line3
转义字符
意义
ASCII码值(十进制)
\a
响铃(BEL)
007
\b
退格(BS) ,将当前位置移到前一列
008
\f
换页(FF),将当前位置移到下页开头
012
\n
换行(LF) ,将当前位置移到下一行开头
010
\r
回车(CR) ,将当前位置移到本行开头
013
\t
水平制表(HT) (跳到下一个TAB位置)
009
\v
垂直制表(VT)
011
\\
代表一个反斜线字符''''\''
092
\''
代表一个单引号(撇号)字符
039
\"
代表一个双引号字符
034
\? 代表一个问号 063
\0
空字符(NUL)
000
\ddd
1到3位八进制数所代表的任意字符
三位八进制
\xhh
十六进制所代表的任意字符
十六进制

python中转义字符是什么意思

python中转义字符是什么意思

python中转义字符是什么意思

python中转义字符是什么意思?

在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符。

如下表:

原始字符串

有时我们并不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。

立即学习“Python免费学习笔记(深入)”;

如:

print r&#39;\t\r&#39;
登录后复制

实际输出为“\t\r”。

d614f800fc6ab41cefe214386a9e009.png

推荐学习:《Python教程》

以上就是python中转义字符是什么意思的详细内容,更多请关注php中文网其它相关文章!

我们今天的关于在Python和sqlite中转义字符python数据库特殊字符转义的分享就到这里,谢谢您的阅读,如果想了解更多关于For循环或executemany-Python和SQLite3、Python 转义字符、python 转义字符\、python中转义字符是什么意思的相关信息,可以在本站进行搜索。

本文标签: