本文的目的是介绍在Python和sqlite中转义字符的详细情况,特别关注python数据库特殊字符转义的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在Python
本文的目的是介绍在Python和sqlite中转义字符的详细情况,特别关注python数据库特殊字符转义的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在Python和sqlite中转义字符的机会,同时也不会遗漏关于For循环或executemany-Python和SQLite3、Python 转义字符、python 转义字符\、python中转义字符是什么意思的知识。
本文目录一览:- 在Python和sqlite中转义字符(python数据库特殊字符转义)
- For循环或executemany-Python和SQLite3
- Python 转义字符
- python 转义字符\
- 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
我最近开始学习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 转义字符
什么是转义字符呢?
就是反斜杠+想要实现的转义功能的首字母
为什么需要转义字符?
当字符串中包含反斜杠、单引号和双引号等有特殊用途的字符时,必须使用反斜杠对这这些字符进行转义(转换一个含义)
反斜杠: \
单引号:’
双引号:"
当字符串包含换行、回车,水平制表符或退格等无法直接
表示的特殊字符时,也可以使用转义字符当字符串中包含
换行.
回车、水平制表符或退格等无法直接表示的特殊字符时,
也可以使用转义字符
换行:\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 转义字符\
转义字符\可以转义很多字符,比如\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用反斜杠(\)转义字符。
如下表:
原始字符串
有时我们并不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。
立即学习“Python免费学习笔记(深入)”;
如:
print r'\t\r'
实际输出为“\t\r”。
推荐学习:《Python教程》
以上就是
我们今天的关于在Python和sqlite中转义字符和python数据库特殊字符转义的分享就到这里,谢谢您的阅读,如果想了解更多关于For循环或executemany-Python和SQLite3、Python 转义字符、python 转义字符\、python中转义字符是什么意思的相关信息,可以在本站进行搜索。
本文标签: