博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyrhon SQLite数据库
阅读量:6603 次
发布时间:2019-06-24

本文共 3334 字,大约阅读时间需要 11 分钟。

 

pyrhon SQLite数据库

目录

介绍导入模块创建数据库/打开数据库创建表在表中插入行查询/修改删除表中的行删除表

 

 

 

介绍

Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它使用一个文件存储整个数据库,操作十分方便。它的最大优点是使用方便,功能相比于其它大型数 据库来说,确实有些差距。但是性能表现上,SQLITE并不逊色。

  

 

# 它有以下特点:# 轻量级# 速度快# 无需部署# 没有服务器# 很少或不需要进行管理# SQLite正在迅速流行起来,并且它还适用于不同的平台。Python 2.5中引入了SQLite数据库适配器作为sqlite3模块,这是Python首次将数据库适配器纳入到标准库中。# SQLite被打包到Python的标准库中,并不是因为它比其他数据库和适配器更加流行,而是因为它足够简单,像DBM模块一样使用文件(或内存)作为其后端存储,不需要服务器,也没有许可证的问题。它是Python中其他类似的 持久化存储解决方案的一个替代品,不过除此以外,它还拥有SQL接口。# 在标准库中拥有该模块,可以使你在Python中使用SQLite开发更加快速,并且使你在有需要的时候,能够更加容易地移植到更加强大的RDBMS(比如MySQL、PostgreSQL、Oracle或SQL Server)中。如果你不需要那些强大的 数据库,那么sqlite3已经是很好的选择了。

  

 

#python的数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本上都是下面几步(假设数据库模块名为db):# 1. 用db.connect创建数据库连接,假设连接对象为conn# 2. 如果该数据库操作不需要返回结果,就直接用conn.execute查询,根据数据库事务隔离级别的不同,可能修改数据库需要conn.commit# 3. 如果需要返回查询结果则用conn.cursor创建游标对象cur, 通过cur.execute查询数据库,用cur.fetchall/cur.fetchone/cur.fetchmany返回查询结果。根据数据库事 务隔离级别的不同,可能修改数据库需要conn .commit# 4. 关闭cur, conn

 

 

 

 

导入模块

import sqlite3

 

 

创建数据库/打开数据库

#如果已经有这个数据库,直接打开数据库#没有的话,则创建一个数据库sqlite3.connect('数据库的路径')

  

# 例子;cx = sqlite3.connect("test.db")# 返回一个数据库连接对象# 它可以有以下操作:# commit()--事务提交   rollback()--事务回滚   close()--关闭一个数据库连接   cursor()--创建一个游标

 

 

# Python SQLITE数据库游标的使用:##  游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL  选择语句相关联。因为游标由结果集(可以是零条、 一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所 得到的文件句柄一样,只要文件打开成功, 该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现 给程序。#  我们知道关系数据库管理系统实质是面向集合的,在Sqlite中并没有一种描述表中单一记录的表达形式,除非使用where  子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。 由此可见,游标允许应用程序对查询语句select  返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。## 下面着重阐述cursor游标的使用。其实,所有sql语句的执行都要在游标对象下进行。

  

 

# 首先,定义一个游标:# 获取到游标对象cu = cx.cursor()#这样定义了一个游标。游标对象有以下的操作:# execute()--执行sql语句   executemany--执行多条sql语句   close()--关闭游标   fetchone()--从结果中取一条记录,并将游标指向下一条记录   fetchmany()--从结果中取多条记录   fetchall()--从结果中取出所有记录   scroll()--游标滚动

  

 

关于SQL语法知识

另外:DB Browser for SQLite可以可视化的查看表结构和数据,非常方便

 

创建表

cu.execute("""create table if not exists        %s(        %s integer primary key autoincrement,        %s varchar(128))"""        % ('user',            'id',            'name'))# 上面语句创建了一个叫user的表,它有一个主键id,一个name列,name是不可以重复的。 # 每个表都必须需要一个主键

  

 

 

 

在表中插入行

 我们插入两行数据

cu.execute("insert into user values(0,'name1')")cu.execute("insert into user values(1,'name2')")cx.commit()# 简单的插入两行数据, 不过需要提醒的是, 最后只有提交了之后, 才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.

  

 

 

查询\修改

 

查询

cu.execute("select * from user")
#获得所有结果 print(cu.fetchall()) #每次调用只输出一个结果 # print(cu.fetchone())
# print(cu.fetchone()) #通过条件查询,查询一个值
print(cu.execute('select * from user where id =1').fetchall())
 

  

[(0, 'name3'), (1, 'name2')] [(1, 'name2')]

  

 

 修改

cu.execute("update user set name='name3' where id = 0")cu.execute("select * from user")print(cu.fetchall())

 

[(0, 'name3'), (1, 'name2')]

  

 

删除表中的行

#删除某行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, 'name2')][]

 

 

 

删除表

cu.execute("DROP TABLE user")#语法DROP TABLE 表名
cu.close() #关闭游标 cx.close() #关闭数据库

  

 

转载于:https://www.cnblogs.com/-wenli/p/10289454.html

你可能感兴趣的文章
如何加密/混乱C源代码
查看>>
Flume Log4J Appender Flume收集Log4j日志
查看>>
我的友情链接
查看>>
Redhat7 替换Centos7 yum源
查看>>
Linux下使用parted分区工具为大于2T硬盘分区
查看>>
在fedora28龙芯版中,让播放器和浏览器硬解1080和4k视频
查看>>
PHP+Mongodb+Nginx+Gridfs安装配置
查看>>
andriod中设置EditText的圆角弧度
查看>>
数据分析达人博客大全
查看>>
WinAPI: CallNextHookEx - 调用下一个钩子
查看>>
学习java虚拟机--类文件结构
查看>>
捕捉全屏图像
查看>>
SQLServer学习笔记(1)
查看>>
MIT Introduction to Algorithms 学习笔记(六)
查看>>
编译Android出错:Unable to execute dex: Java heap space
查看>>
.net实现高效的Http处理
查看>>
Hibernate(二)
查看>>
java基础jkd环境变量配置以及软件安装
查看>>
SVProgressHUD–比MBProgressHUD更好用的 iOS进度提示组件
查看>>
libusb的嵌入式移植
查看>>