pyrhon SQLite数据库
pyrhon SQLite数据库
目录
1 2 3 4 5 6 7 8 | 介绍 导入模块 创建数据库 / 打开数据库 创建表 在表中插入行 查询 / 修改 删除表中的行 删除表 |
介绍
1 | Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它使用一个文件存储整个数据库,操作十分方便。它的最大优点是使用方便,功能相比于其它大型数<br>据库来说,确实有些差距。但是性能表现上,SQLITE并不逊色。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 它有以下特点: # 轻量级 # 速度快 # 无需部署 # 没有服务器 # 很少或不需要进行管理 # SQLite正在迅速流行起来,并且它还适用于不同的平台。Python 2.5中引入了SQLite数据库适配器作为sqlite3模块,这是Python首次将数据库适配器纳入到标准库中。 # SQLite被打包到Python的标准库中,并不是因为它比其他数据库和适配器更加流行,而是因为它足够简单,像DBM模块一样使用文件(或内存)作为其后端存储,不需要服务器,也没有许可证的问题。它是Python中其他类似的<br>持久化存储解决方案的一个替代品,不过除此以外,它还拥有SQL接口。 # 在标准库中拥有该模块,可以使你在Python中使用SQLite开发更加快速,并且使你在有需要的时候,能够更加容易地移植到更加强大的RDBMS(比如MySQL、PostgreSQL、Oracle或SQL Server)中。如果你不需要那些强大的<br>数据库,那么sqlite3已经是很好的选择了。 |
1 2 3 4 5 6 | #python的数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本上都是下面几步(假设数据库模块名为db): # 1. 用db.connect创建数据库连接,假设连接对象为conn # 2. 如果该数据库操作不需要返回结果,就直接用conn.execute查询,根据数据库事务隔离级别的不同,可能修改数据库需要conn.commit # 3. 如果需要返回查询结果则用conn.cursor创建游标对象cur, 通过cur.execute查询数据库,用cur.fetchall/cur.fetchone/cur.fetchmany返回查询结果。根据数据库事 务隔离级别的不同,可能修改数据库需要conn<br>.commit # 4. 关闭cur, conn |
导入模块
1 | import sqlite3 |
创建数据库/打开数据库
1 2 3 | #如果已经有这个数据库,直接打开数据库 #没有的话,则创建一个数据库 sqlite3.connect( '数据库的路径' ) |
1 2 3 4 5 | # 例子; cx = sqlite3.connect( "test.db" ) # 返回一个数据库连接对象 # 它可以有以下操作: # commit()--事务提交 rollback()--事务回滚 close()--关闭一个数据库连接 cursor()--创建一个游标 |
1 2 3 4 5 6 | # Python SQLITE数据库游标的使用: # # 游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联。因为游标由结果集(可以是零条、<br>一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所<br>得到的文件句柄一样,只要文件打开成功, 该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现<br>给程序。 # 我们知道关系数据库管理系统实质是面向集合的,在Sqlite中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。<br>由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。 # # 下面着重阐述cursor游标的使用。其实,所有sql语句的执行都要在游标对象下进行。 |
1 2 3 4 5 | # 首先,定义一个游标: # 获取到游标对象 cu = cx.cursor() #这样定义了一个游标。游标对象有以下的操作: # execute()--执行sql语句 <br>executemany--执行多条sql语句 <br>close()--关闭游标 <br>fetchone()--从结果中取一条记录,并将游标指向下一条记录 <br>fetchmany()--从结果中取多条记录 <br>fetchall()--从结果中取出所有记录 <br>scroll()--游标滚动 <br> |
关于SQL语法知识
http://www.w3school.com.cn/sql/index.asp
https://www.cnblogs.com/ray-wong/p/3792515.html
另外:DB Browser for SQLite可以可视化的查看表结构和数据,非常方便
创建表
1 2 3 4 5 6 7 8 9 | cu.execute( """create table if not exists %s( %s integer primary key autoincrement, %s varchar(128))""" % ( 'user' , 'id' , 'name' )) # 上面语句创建了一个叫user的表,它有一个主键id,一个name列,name是不可以重复的。<br># 每个表都必须需要一个主键 |
在表中插入行
我们插入两行数据
1 2 3 4 | cu.execute( "insert into user values(0,'name1')" ) cu.execute( "insert into user values(1,'name2')" ) cx.commit() # 简单的插入两行数据, 不过需要提醒的是, 最后只有提交了之后, 才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作. |
查询\修改
查询
1 | cu.execute( "select * from user" ) #获得所有结果<br>print(cu.fetchall())<br><br>#每次调用只输出一个结果<br># print(cu.fetchone())<em># print(cu.fetchone())<br><br></em>#通过条件查询,查询一个值<em><br></em>print(cu.execute('select * from user where id =1').fetchall()) |
1 | [( 0 , 'name3' ), ( 1 , 'name2' )]<br><br>[( 1 , 'name2' )] |
修改
1 2 3 | cu.execute( "update user set name='name3' where id = 0" ) cu.execute( "select * from user" ) print (cu.fetchall()) |
1 | [( 0 , 'name3' ), ( 1 , 'name2' )] |
删除表中的行
1 2 3 4 5 6 7 8 9 | #删除某行 cu.execute( "DELETE FROM user WHERE id = '0'" ) cu.execute( "select * from user" ) print (cu.fetchall()) #删除所有行 cu.execute( "DELETE FROM user" ) cu.execute( "select * from user" ) print (cu.fetchall()) |
1 2 | [( 1 , 'name2' )] [] |
删除表
1 | cu.execute( "DROP TABLE user" ) #语法DROP TABLE 表名cu.close() #关闭游标<br>cx.close() #关闭数据库 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?