请选择 进入手机版 | 继续访问电脑版

[python] Python标准库之数据库 sqlite3

[复制链接]
查看144 | 回复35 | 2021-9-13 11:26:46 | 显示全部楼层 |阅读模式
目次

Python自带一个轻量级的关系型数据库SQLite。这一数据库使用 SQL语言。SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具。SQLite还在别的 范畴 有广泛的应用,比如HTML5和移动端。Python标准库中的sqlite3提供该数据库的接口。

我将创建一个简单的关系型数据库,为一个书店存储书的分类和价格。数据库中包含两个表:category用于记录分类,book用于记录某个书的信息。一本书归属于某一个分类,因此book有一个外键(foreign key),指向catogory表的主键id。

Python标准库之数据库 sqlite3

1、创建数据库

我起首 来创建数据库,以及数据库中的表。在使用 connect()毗连 数据库后,我就可以通过定位指针cursor,来实验 SQL下令

  1. # By Vamei
  2. import sqlite3
  3. # test.db is a file in the working directory.
  4. conn = sqlite3.connect("test.db")
  5. c = conn.cursor()
  6. # create tables
  7. c.execute('''CREATE TABLE category
  8. (id int primary key, sort int, name text)''')
  9. c.execute('''CREATE TABLE book
  10. (id int primary key,
  11. sort int,
  12. name text,
  13. price real,
  14. category int,
  15. FOREIGN KEY (category) REFERENCES category(id))''')
  16. # save the changes
  17. conn.commit()
  18. # close the connection with the database
  19. conn.close()
复制代码

SQLite的数据库是一个磁盘上的文件,如上面的test.db,因此整个数据库可以方便的移动或复制。test.db一开始不存在,以是 SQLite将自动 创建一个新文件。

使用

  1. execute()命令
复制代码
,我实验 了两个SQL下令 ,创建数据库中的两个表。创建完成后,保存并断开数据库毗连 。

 2、插入数据

上面创建了数据库和表,建立 了数据库的抽象布局 。下面将在同一数据库中插入数据

  1. # By Vamei
  2. import sqlite3
  3. conn = sqlite3.connect("test.db")
  4. c = conn.cursor()
  5. books = [(1, 1, 'Cook Recipe', 3.12, 1),
  6. (2, 3, 'Python Intro', 17.5, 2),
  7. (3, 2, 'OS Intro', 13.6, 2),
  8. ]
  9. # execute "INSERT"
  10. c.execute("INSERT INTO category VALUES (1, 1, 'kitchen')")
  11. # using the placeholder
  12. c.execute("INSERT INTO category VALUES (?, ?, ?)", [(2, 2, 'computer')])
  13. # execute multiple commands
  14. c.executemany('INSERT INTO book VALUES (?, ?, ?, ?, ?)', books)
  15. conn.commit()
  16. conn.close()
复制代码

插入数据同样可以使用 execute()来实验 完备 的SQL语句。SQL语句中的参数,使用 "?"作为替换 符号,并在后面的参数中给出详细 值。这里不能用Python的格式化字符串,如"%s",由于 这一用法容易 受到SQL注入攻击。

我也可以用

  1. executemany()
复制代码
的方法来实验 多次插入,增长 多个记录。每个记录是表中的一个元素,如上面的books表中的元素。

3、查询

在实验 查询语句后,Python将返回一个循环器,包含有查询获得的多个记录。你循环读取,也可以使用 sqlite3提供的fetchone()和fetchall()方法读取记录

  1. # By Vamei
  2. import sqlite3
  3. conn = sqlite3.connect('test.db')
  4. c = conn.cursor()
  5. # retrieve one record
  6. c.execute('SELECT name FROM category ORDER BY sort')
  7. print(c.fetchone())
  8. print(c.fetchone())
  9. # retrieve all records as a list
  10. c.execute('SELECT * FROM book WHERE book.category=1')
  11. print(c.fetchall())
  12. # iterate through the records
  13. for row in c.execute('SELECT name, price FROM book ORDER BY sort'):
  14. print(row)
复制代码

4、更新与删除

你可以更新某个记录,或者删除记录:

  1. # By Vamei
  2. conn = sqlite3.connect("test.db")
  3. c = conn.cursor()
  4. c.execute('UPDATE book SET price=? WHERE id=?',(1000, 1))
  5. c.execute('DELETE FROM book WHERE id=2')
  6. conn.commit()
  7. conn.close()
复制代码

你也可以直接删除整张表:

  1. c.execute('DROP TABLE book')
复制代码

假如 删除test.db,那么整个数据库会被删除。

总结:

sqlite3只是一个SQLite的接口。想要纯熟 的使用 SQLite数据库,还必要 学习更多的关系型数据库的知识。

到此这篇关于Python标准库之数据库 sqlite3的文章就先容 到这了,更多相干 Python 标准库 sqlite3内容请搜索 脚本之家从前 的文章或继续欣赏 下面的相干 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 荷叶224 | 2021-9-28 14:32:11 | 显示全部楼层
看帖回帖一条路!
回复

使用道具 举报

avatar 划翔的青鸟纲 | 2021-10-3 19:30:20 | 显示全部楼层
admin楼主,你妈妈喊你回家吃药!
回复

使用道具 举报

avatar 淡淡如菊795 | 2021-10-3 20:55:30 | 显示全部楼层
脑残片admin楼主今天吃了么?
回复

使用道具 举报

avatar 们至熟两创 | 2021-10-6 11:46:12 | 显示全部楼层
最近回了很多帖子,都没人理我!
回复

使用道具 举报

avatar 绚丽源自寂寞悍 | 2021-10-6 17:07:13 | 显示全部楼层
每天顶顶贴,一身轻松啊!
回复

使用道具 举报

avatar 123457297 | 2021-10-9 05:43:55 | 显示全部楼层
这么好的帖子,应该加精华!
回复

使用道具 举报

avatar 15155324777 | 2021-10-15 21:10:34 | 显示全部楼层
楼上的很有激情啊!
回复

使用道具 举报

avatar 一品菊花茶酪 | 2021-10-16 15:24:49 | 显示全部楼层
这一年啥事没干,光研究admin楼主的帖子了!
回复

使用道具 举报

avatar 我是来围观的逊 | 2021-10-16 23:33:59 | 显示全部楼层
好帖子!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则