Python 如何操作 SQLite 数据库
作者:Rocky0429 发布时间:2024-01-24 00:09:27
写在之前
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。
来源:https://cloud.tencent.com/developer/article/1534514
猜你喜欢
- 一、数据描述数据集中9994条数据,横跨1237天,销售额为2,297,200.8603美元,利润为286,397.0217美元,他们的库存
- 现在主流的cms或者blog等系统中,都内置的有插件系统,但是层层深入、剖析实现的方式,其实都是最简单的钩子的复杂化的实现。前言钩子是插件执
- 什么是异常?异常是一个事件,其中一个程序,破坏程序的指令的正常流的执行过程中而发生的。一般情况下,当一个Python脚本遇到一些情况不能处理
- 由于工作对人的眼球和精神都会带来一定的疲劳,所以在界面设计中,希望用户能够准确的关注重要的信息,而不因为用户的长期使用而流失信息。最近在看《
- 序列解包(Sequence Unpacking)是Python中非常重要和常用的一个功能,可以使用非常简洁的形式完成复杂的功能,大幅度提高了
- 代码如下webfig1.pyfrom flask import Flaskfrom flask import render_template
- 前言前段时间做项目的时候,需要一个Markdown编辑器,在网上找了一些开源的实现,但是都不满足需求说实话,这些开源项目也很难满足需求公司项
- 通过在网络上查找资料和自己的尝试,我认为以下系统参数是比较关键的:(1)、back_log:要求 MySQL 能有的连接数量。当主要MySQ
- 最近在学习python的内容,在导入requsets库的时候遇到了问题。import requests查了一下资料是requests库需要安
- 进程互斥锁多进程同时抢购余票# 并发运行,效率高,但竞争写同一文件,数据写入错乱# data.json文件内容为 {"ticket
- update :单表的更新不用说了,两者一样,主要说说多表的更新 O
- 本文实例讲述了Flask框架通过Flask_login实现用户登录功能。分享给大家供大家参考,具体如下:通过Flask_Login实现用户验
- 实例如下所示:>>> import pandas as pd>>> df = pd.DataFrame(
- 本文主要给大家讲解了Apriori算法的基础知识以及Apriori算法python中的实现过程,以下是所有内容:1. Apriori算法简介
- 为什么要问如何存储IP?首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗?其实做任何程序设计都要在功能
- Golang: 接收GET和POST参数GET 和 POST 是我们最常用的两种请求方式,今天讲一讲如何在 golang 服务中,正确接收这
- 1. vue打包后font-awesome字体失效解决方案:2. 打包后图片资源失效解决方案:针对html中引用的图片针对css添加的背景中
- 对数据库的备份是网站管理人员的必修课,那么常用的数据库备份方式有哪些呢?应如何选择?数据库备份有四种类型,分别应用于不同的场合,下面简要介绍
- =一、链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一
- 每天一个JS 小demo之新建文件夹。主要知识点:DOM方法的综合运用<!DOCTYPE html><html lang=