利用sqlite3创建并操作数据库_sqlite3创建数据库-程序员宅基地

技术标签: database  数据库  sql  

(二)利用sqlite3创建并操作数据库

  • 在命令行启动sqlite3,创建student.db数据库
    在这里插入图片描述
  • 查看所有数据库
    在这里插入图片描述
    在这里插入图片描述
  • 创建stu表(概括来讲,SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型,分别代表空值、整型值、浮点值、字符串文本、二进制对象。)
    在这里插入图片描述
  • 查看表结构
    在这里插入图片描述
  • 插入四条记录
sqlite> insert into stu (id, name, gender, age) values (1, '余星舟', '男', 19);
sqlite> insert into stu (id, name, gender, age) values (2, '李云美', '女', 18);
sqlite> insert into stu (id, name, gender, age) values (3, '张运恒', '男', 20);
sqlite> insert into stu (id, name, gender, age) values (4, '郑小翠', '女', 18);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

  • 查看stu全部表记录
    在这里插入图片描述
  • 查询stu所有男生记录
    在这里插入图片描述
  • 查询19岁的男生
    在这里插入图片描述
  • 查询19岁的男生,只显示姓名与年龄
    在这里插入图片描述
  • 按照年龄升序排列
    在这里插入图片描述
  • 按照年龄降序排列
    在这里插入图片描述
  • 先按性别降序排列,再按年龄升序排列
    在这里插入图片描述
  • 统计个数、最大年龄、最小年龄、总年龄、平均年龄
    在这里插入图片描述
  • 按性别分类统计个数、最大年龄、最小年龄、总年龄、平均年龄
select gender, count(*) as 人数, max(age) as 最大年龄, min(age) as 最小年龄, sum(age) as 总年龄, avg(age) as 平均年龄 from stu group by gender;
  • 1

在这里插入图片描述

  • 将郑小翠的年龄改成19岁
    在这里插入图片描述
  • 将第一条记录姓名改为“李晓文”,性别改为“女”,年龄改为“19”
    在这里插入图片描述
  • 删除id为3的记录
    在这里插入图片描述
  • 查询所有姓“李”的记录(模糊查询采用like运算符,有两个通配符:%_,其中%代表任意多个任意字符,_代表一个任意字符)
    在这里插入图片描述
  • 修改id=1的记录,姓名改为“李晓”
    在这里插入图片描述
  • 查询所有姓“李”的单名记录
    在这里插入图片描述
  • 查询所有姓“李”的双名记录
    在这里插入图片描述
  • 插入一条“王晓云”记录
    在这里插入图片描述
  • 查询姓名包含了“云”的记录
    在这里插入图片描述

三、使用Navicat来管理数据库

(一)下载Navicat12

下载链接:百度网盘 请输入提取码 提取码:aihp

(二)安装Navicat12

在这里插入图片描述
在这里插入图片描述

  • 按照向导完成安装,启动Navicat12
    在这里插入图片描述

(三)创建SQLite连接

  • 选择创建SQLite…连接
    在这里插入图片描述
  • 设置连接名,设置现有sqlite3数据库
    在这里插入图片描述
  • 单击【确定】按钮
    在这里插入图片描述
  • 打开连接,查看数据库及表
    在这里插入图片描述

(三)查看stu表内容

1、直接打开表查看表内容

  • 选中表,单击右键,在快捷菜单中选择“打开表”
    在这里插入图片描述
    在这里插入图片描述

2、通过“查询”显示表内容

  • 操作步骤录屏
    在这里插入图片描述
  • 查询操作的结果
    在这里插入图片描述

(四)修改stu表内容

1、直接打开表修改表内容

  • 直接修改id=1的记录
    在这里插入图片描述
    在这里插入图片描述

2、通过“查询”修改表内容

  • 通过查询修改id=3的记录
    在这里插入图片描述
  • 查看修改后的表内容
    在这里插入图片描述

(五)分类汇总stu表

  • 按性别分类统计个数、最大年龄、最小年龄、总年龄、平均年龄
    在这里插入图片描述

(六)多表关联查询

1、创建score表

CREATE TABLE score (id INTEGER, name TINYTEXT, chinese INTEGER, math INTEGER, english INTEGER, sum INTEGER);
  • 1

在这里插入图片描述

  • 给score表插入4条记录
INSERT INTO score (id, name, chinese, math, english) VALUES (1, '余星舟', 78, 84, 91);
INSERT INTO score (id, name, chinese, math, english) VALUES (2, '李云美', 80, 74, 65);
INSERT INTO score (id, name, chinese, math, english) VALUES (3, '张振强', 65, 90, 75);
INSERT INTO score (id, name, chinese, math, english) VALUES (4, '郑小翠', 90, 64, 88);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

  • 查看score表内容
    在这里插入图片描述
  • 利用update命令填充sum字段
    在这里插入图片描述
  • 查看score表记录
    在这里插入图片描述

2、实现stu表与score表的关联查询(一对一的关联)

  • 任务:查询每个学生的成绩情况,显示学号、姓名、性别、年龄、语文、数学、英语和总分

(1)利用where子句来实现关联查询

  • FROM stu, score —— stu是主表,score是子表
    在这里插入图片描述
    在这里插入图片描述
  • 都是按照FROM子句的第一张表的id顺序显示的
  • 要按照score表的id顺序来显示(FROM score, stu —— score是主表,stu是子表)
    在这里插入图片描述

(2)利用join关键字来实现关联查询

  • 有四种连接方式:inner join, left outer join, right outer join, full outer join
  • stu 关联 score 进行查询
    在这里插入图片描述
  • score 关联 stu 进行查询
    在这里插入图片描述

四、Python访问SQLite数据库

SQLite是Python自带的唯一的关系数据库包,其他的关系数据库则需要通过第三方扩展来访问。Python的API规范定义了底层Python脚本和数据库的访问SQL接口,各种关系数据库在实现Python的SQL接口可能不会遵循Python规范,但与差异很小。

(一)了的解Python的SQL接口

1、连接对象 - Connection

连接对象用于创建数据库连接,所有的数据库操作均通过连接对象与数据库完成交互。连接对象生成游标对象。

2、游标对象 - Cursor

游标对象用于执行各种SQL语句:create table、update、insert、delete、select等。通常连接对象也可执行各种SQL语句。一般返回select语句都使用游标对象来执行,查询结果保存在游标对象中。

3、SQL查询结果

从游标对象中提取的查询结果时,单个记录表示为元组,多个记录则用包含元组的列表表示。在Python脚本中,进一步使用元组或列表操作来处理从数据库返回的查询结果。

(二)连接和创建SQLite数据库

1、创建数据库

  • 访问SQLite数据库时,需要先导入sqlite3模块,然后调用connect()方法建立数据库连接。
    在这里插入图片描述

2、创建内存数据库

  • 如果使用“:memory:”表示文件名,Python会创建一个内存数据库。内存数据库中的所有数据均保存在内存中,关闭连接对象时,所有数据自动删除。

在这里插入图片描述

3、创建临时数据库

  • 如果使用空字符串作为文件名,Python会创建一个临时数据库。临时数据库有一个临时文件,所有数据保存在临时文件中。连接对象关闭时,临时文件和数据也会自动删除。
    在这里插入图片描述

4、关闭数据库连接

  • 执行完所有操作后,应执行close()方法关闭连接对象,释放占用的资源。
    在这里插入图片描述

(三)创建表

通过连接对象或游标对象的execute()方法执行create table语句创建表。

1、通过连接对象创建表

conn.execute('create table user(name text, gender text, age integer)')
  • 1

在这里插入图片描述

  • 删除刚才创建的user表
    在这里插入图片描述

2、通过游标对象创建表

cursor = conn.cursor()
cursor.execute('create table user(name text, gender text, age integer)')
  • 1
  • 2

在这里插入图片描述

(四)添加记录

  • 通过连接对象或游标对象的execute()方法执行insert into语句插入记录
    在这里插入图片描述

  • 添加记录后,可使用游标对象的rowcount属性查看影响的记录行数
    在这里插入图片描述

  • SQLite允许在insert into语句中使用问号表示参数,在execute()方法中用元组提供参数数据
    在这里插入图片描述

  • 使用参数时,可以使用executemany()方法一次添加多条记录,记录数据用元组列表表示
    在这里插入图片描述

  • 执行记录相关的修改操作(添加、删除或更新)时,应执行连接对象的commit()方法提交修改。如果没有执行commit()方法,关闭连接对象后,所有修改都会失效。
    在这里插入图片描述

  • 连接对象的另一个方法rollback()可用于撤销最后一次调用commit()方法后所做的修改。

(五)查询记录

1、使用游标对象的fetchall()方法提取全部查询结果

  • 执行select语句可返回数据库中的数据。使用连接对象执行select语句时,返回包含查询结果的游标对象。游标对象的fetchall()方法提取全部查询结果。提取出的查询结果中,每条记录为一个元组,所有记录的元组组成一个列表。
    在这里插入图片描述

  • 使用连接对象的execute()方法执行SQL语句
    在这里插入图片描述
    在这里插入图片描述

2、使用游标对象来执行select语句

  • 说明:调用游标对象的fetchall()方法之后,记录指针指向文件尾
    在这里插入图片描述
  • 能否将记录指针移向第一条记录?

3、使用循环来迭代fetchall()方法取回的数据

在这里插入图片描述

4、使用fetchone()方法提取一条记录

  • fetchone()方法可以每次提取一条记录,返回的记录为一个元组。在达到表位时,返回None。
    在这里插入图片描述
  • 换一种方式来遍历全部记录
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Xiaoyang0921/article/details/122317216

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue