PythonSQLite3的execute函数参数详细说明
Python使用SQLite3在使用execute方法执行数据更新时,如何传递要更新的数据。
搜索了挺久,很多博客文章人云亦云,抄来抄去,没有找到有价值的东西。
用Bing搜到官方文档。转译如下。
官方原文点击浏览https://docs.python.org/3/library/sqlite3.html
SQL 操作通常需要使用Python变量保存的值。然而,要知道,使用Python字符串拼接操作来组装SQL语言,是非常危险的,很容易受到SQL注入攻击。
-
# 千万不要这样做,不安全!
-
symbol = 'RHAT'
-
cur.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
相反,应该使用 数据库管理软件 如 SQLite 官方提供的API 中的参数替换方法。
为了在查询语句中使用变量,可以在查询语句的字符串中使用占位符 placeholder,用来代替实际的值,然后将这些实际值组成 元组 tuple【注意:是python的tuple】 作为 游标 cursor 的 execute() 的第二个参数来实现。
有两种占位符方式。
一种是用 ? 作为占位符(qmark style),另一种是 命名占位符(named style)。
问号占位符(qmark style)中参数 必须是序列类型 (sequence)。【博主注:序列类型 (sequence)常见有list, str, tuple 和 bytes】
命名占位符(named style)参数可以是序列类型(sequence),也可以是字典 dict 类型。
序列类型的长度必须和占位符的个数一致,否则会抛出 ProgrammingError 异常。
字典类型则必须包含所有的命名参数的键 key。
序列和字典里多余的项和元素会被忽略。
例子如下。
-
import sqlite3
-
-
con = sqlite3.connect(":memory:")
-
cur = con.cursor()
-
cur.execute("create table lang (name, first_appeared)")
-
-
# This is the qmark style:
-
cur.execute("insert into lang values (?, ?)", ("C", 1972))
-
-
# The qmark style used with executemany():
-
lang_list = [
-
("Fortran", 1957),
-
("Python", 1991),
-
("Go", 2009),
-
]
-
cur.executemany("insert into lang values (?, ?)", lang_list)
-
-
# And this is the named style:
-
cur.execute("select * from lang where first_appeared=:year", {"year": 1972})
-
print(cur.fetchall())
-
-
con.close()
深入研究会发现,问号占位符模式下,execute的第二个参数其实可以是 list,str, tuple, bytes,但是一般情况下是使用 不可被修改 tuple,更加安全。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhehcb
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01