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 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
Python实现决策树C4.5算法的示例
May 30 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
python实现对变位词的判断方法
Apr 05 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
python之json文件转xml文件案例讲解
Aug 07 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
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
phpfpm的作用和用法
2019/10/10 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
大学生素质拓展活动方案
2014/02/11 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
经费申请报告
2015/05/15 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书