Python 如何操作 SQLite 数据库


Posted in Python onAugust 17, 2020

写在之前

SQLite 是一个小型的关系型数据库,它最大的特点在于不需要单独的服务、零配置。我们在之前讲过的两个数据库,不管是 MySQL 还是 MongoDB,都需要我们安装。安装之后,然后运行起来,其实这就相当于已经有一个相应的服务在跑着。

SQLite 与前面所说的两个数据库不同。首先Python 已经将相应的驱动模块作为了标准库的一部分,只要是你安装了 Python,就可以使用;再者它可以类似于操作文件那样来操作 SQLite 数据库文件。还有一点,SQLite 源代码不受版权限制。

建立连接

SQLite 也是一个关系型数据库,所以 SQL 可以直接在里面使用。由于 SQLite 的驱动已经在 Python 里面了,所以只要引用就可以直接使用,由于我们之前已经讲过 MySQL 了,所以对于本次内容理解起来就容易多了。

>>> import sqlite3
>>> conn = sqlite3.connect('lite.db')

由上面的代码我们得到了连接对象,是不是觉得比 MySQL 连接要简单很多呢?在 sqlite3.connect('lite.db') 中,如果已经有了那个数据库,就直接连接它,如果没有的话,就会自动建一个。需要注意的是,这里的路径是可以随意指定的。

下面的代码显示的是连接对象的属性和方法:

>>> dir(conn)
['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'commit', 'create_aggregate', 'create_collation', 'create_function', 'cursor', 'execute', 'executemany', 'executescript', 'in_transaction', 'interrupt', 'isolation_level', 'iterdump', 'rollback', 'row_factory', 'set_authorizer', 'set_progress_handler', 'set_trace_callback', 'text_factory', 'total_changes']

建立游标

这一步其实跟 MySQL 也很类似,连接了数据库之后,要建立游标对象:

>>> cur = conn.cursor()

接下来就是对数据库内容的操作,都是用游标对象方法来实现:

>>> dir(cur)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'arraysize', 'close', 'connection', 'description', 'execute', 'executemany', 'executescript', 'fetchall', 'fetchmany', 'fetchone', 'lastrowid', 'row_factory', 'rowcount', 'setinputsizes', 'setoutputsize']

我们在里面看到了一系列我们熟悉的名称:close()、execute()、fetchall() 等。

1.创建数据库表

面对 SQLite 数据库,我们之前熟悉的 SQL 指令都可以用:

>>> create_table = "create table books (title,author,language)"
>>> cur.execute(create_table)
<sqlite3.Cursor object at 0x104f296c0>

这样就在数据库 lite.db 中建立了一个表 books。对这个表可以增加数据:

>>> cur.execute('insert into books values("python basic","rocky","python")')
<sqlite3.Cursor object at 0x104f296c0>

为了保证数据能够保存,还要进行如下操作:

>>> conn.commit()
>>> cur.close()
>>> conn.close()

以上,在刚才建立的数据库中已经有了一个表 books,表中已经有了一条记录。

2.查询

保存以后我们来查询一下:

>>> conn = sqlite3.connect('lite.db')
>>> cur = conn.cursor()
>>> cur.execute('select * from books')
<sqlite3.Cursor object at 0x104f297a0>
>>> cur.fetchall()
[('python basic', 'rocky', 'python')]

3.批量插入

我们来给 books 表中多增加一些内容,以便于我们进行其它的操作:

>>> books = [("first book","first","c"),("second book","second","c++"),("third book","third","java")]

这次我们来一个批量插入:

>>> cur.executemany('insert into books values (?,?,?)',books)
<sqlite3.Cursor object at 0x104f297a0>
>>> conn.commit()

接下来我们用循环语句来打印一下查询结果:

>>> rows = cur.execute('select * from books')
>>> for row in rows:
... print(row)
... 
('python basic', 'rocky', 'python')
('first book', 'first', 'c')
('second book', 'second', 'c++')
('third book', 'third', 'java')

4.更新

正如我们前面所说的,在 cur.execute() 中,可以写 SQL 语句来操作数据库:

>>> cur.execute("update books set title='physics' where author='first'")
<sqlite3.Cursor object at 0x104f297a0>
>>> conn.commit()

接下来我们按照条件查询来看一看:

>>> cur.execute("select * from books where author='first'")
<sqlite3.Cursor object at 0x104f297a0>
>>> cur.fetchall()


[('physics', 'first', 'c')]

5.删除

删除也是操作数据库必须的动作:

>>> cur.execute("select * from books")
<sqlite3.Cursor object at 0x104f297a0>
>>> cur.fetchall()
[('python basic', 'rocky', 'python'), ('physics', 'first', 'c'), ('third book', 'third', 'java')]

最后不要忘记在完成对数据库的操作以后,一定记得给人家「关上门」:

>>> cur.close()
>>> conn.close()

写在之后

基本的知识差不多就是这些,当然肯定不局限于此。在实际的编程中我们肯定会遇到很多的问题,大家记得要多多去查阅官方文档,学会解决问题。

至此,Python 操作数据这一部分就结束了,其实不光是这一个章节的结束,我计划里面的整个「零基础入门学习 Python」这个系列也到此结束了,后续随着我碰到的知识的增加,还会再给大家更新关于 Python 方面的东西,让我们一起加油。

如果你觉得本篇文章对你有所帮助的话,欢迎点赞 + 关注,期待和你的交流。

The end。

以上就是Python 如何操作 SQLite 数据库的详细内容,更多关于python操作 SQLite 数据库的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
在Python中移动目录结构的方法
Jan 31 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
Aug 06 Python
Flask模板引擎Jinja2使用实例
Apr 23 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
python如何修改文件时间属性
Feb 05 Python
Python操作CSV格式文件的方法大全
Jul 15 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 #Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 #Python
Python 程序员必须掌握的日志记录
Aug 17 #Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 #Python
Python 如何查找特定类型文件
Aug 17 #Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 #Python
无需压缩软件,用python帮你操作压缩包
Aug 17 #Python
You might like
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
php类常量的使用详解
2013/06/08 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
python 定时修改数据库的示例代码
2018/04/08 Python
python 阶乘累加和的实例
2019/02/01 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
群胜软件Java笔试题
2012/09/29 面试题
函授毕业自我鉴定
2014/02/04 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
毕业论文评语大全
2014/04/29 职场文书
销售人员工作自我评价
2014/09/21 职场文书
党员先进事迹材料
2014/12/19 职场文书
工程质量保证书
2015/05/09 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书