educoder实训平台python答案之位运算符_少儿Python编程_第八讲:数据库

ce69cfa6433c56550e419959b334ec18.png

少量的数据一般可以使用数据文件存储,当数据量到达上万行,列也较多时,存储速度就比较慢,一次读出全部内容会占用大量内存,如果只读取部分内容将增加程序的复杂度,查找、插入、删除等操作也会变慢。这种情况下一般使用数据库存储、读写和查询大量的数据。

8.1 数据存储

数据存储种类繁多,比如网络存储、搜索服务、数据仓库、数据库等等。

网络存储是互联网公司推出的在线存储服务,如百度网盘、联想网盘,它们把用户的数据存储在地址位置不同的远端计算机上,存储方法类似于在本地的磁盘上存储数据。通过网络连接让用户高速、方便地使用远程计算机上的存储空间,还有强大的备份功能,保证用户数据安全。

如果把相片存储在自己的手机上,万一手机有一天丢了或者坏掉了,相片也会全部丢失。而存储在服务器端,使用任何计算机或者手机都可以下载,远端的服务器(服务器指较为大型的计算机)一般还提供备份服务,可能一份数据存储在北京的服务器上,备份数据存储在上海的服务器上,万一某天由于火灾、地震等意外情况某一组远端服务器的数据被破坏,备份数据还能使用。当然使用网络存储也需要支付一定的费用。比如百度网盘,存储少量数据免费,存储大量数据按年收费。

搜索服务主要用于文本数据(文字信息)的存储,数据同样可以存储在一台或者多台服务器上,通过对数据建立索引,读写查询文本的速度非常快。

另外,还有数据库和数据仓库,数据库存储的是数据表类的数据,要求事先知道数据的格式,数据库也可以安装在一台或者多台服务器上,其它终端(手机或者电脑)通过程序连接数据库,并将数据存储在数据库中。当数据的格式更为复杂,数据量更大时,往往使用数据仓库存储。

课后练习:(练习答案见本讲最后的小结部分)

练习一:为自己申请免费的百度网盘空间,并在其中备份数据。

8.2 数据库

数据库是到目前使用最多的数据存储方式,数据库的种类也很多,开发者可以根据用途选择适合自己的数据库,比如医院、银行一般使用功能强大且需要付费的Oracle数据库,开发普通网站更多使用免费的MySQL数据库,还有微软的SQL Server数据库,早期数据一般存储在FoxPro数据库中等等。

操作数据库也有一套基本语法,像编程语言一样,它包括对数据库最常用的操作,叫做结构化查询语言,简称SQL。虽然操作每种数据库的SQL略有差异,但基本操作都类似,只要学习其中一种,其它的语法基本都能看懂。

本讲将学习一种最为简单的SQL——SQLite是一款轻型数据库,使用它无需安装数据库服务端程序,也无需配置,占用内存低,处理速度快,使用起来非常方便。

课后练习:

练习二:说说数据库语言和编程语言的区别,列出几种常用的数据库的名字。

8.3 Python访问数据库

程序访问数据库的操作类似于读写文件,主要分为以下几步:

第一步:连接数据库。
第二步:使用SQL语句操作数据库。
第三步:更新数据库。
第四步:关闭数据库。

Python访问数据程序非常简单,先看一段代码。

01 import sqlite3 
02 
03 conn = sqlite3.connect('test.db') 
04 conn.execute('''create table if not exists tips 
05        (name text, 
06        address text, 
07        bill real);''') 
08 conn.execute("insert into tips (name,address,bill)  
09        values ('Zhang', 'Beijing', 1004.00 )"); 
10 conn.execute("insert into tips (name,address,bill)  
11        values ('Wang', 'Shanghai', 1200.00 )"); 
12 cursor = conn.execute("select * from tips") 
13 for row in cursor: 
14     print(row) 
15 conn.commit() 
16 conn.close()

第01行,先引入了sqlite3三方库,用于支持Python访问SQLite数据库,Anaconda工具集已经安装了sqlite3模块,所以直接导入即可使用。
第03行,在当前目录下建立一个名为test.db的文件作为数据库文件,用于存储数据表。
第04-07行,使用SQL语句创建了一个数据表tips,请注意,由于SQL语句中包含了换行,此处使用了三引号(输入三个单引号)。
第08-09行,向表中插入第一行数据:名字为Zhang,地址为北京,帐单1004。在程序中可以看到,如果某行内容太多,需要换行时,可以使用三引号,或者在行尾加入“”符号。
第10-11行,向表中插入第二行数据:名字为Wang,地址为上海,帐单1200,由于insert语句一次只能插入一条数据,因此使用了两次insert语句。
第12行,查询表tips中的所有数据,并将结果赋值给变量cursor。
第13-14行,在屏幕上显示返回结果。
第15行,更新数据库。
第16行,关闭数据库。

可以看到,程序中先使用sqlite3.connect ()连接数据库,并得到对象conn,然后用对象conn的execute方法执行SQL语句

程序执行之后生成的数据表如表7.1所示:

f0cccd293a12addd227541620bdb31ee.png
表7.1 程序生成的数据表

其中横向为行,纵向为列,表中的第一行是表头,它描述了每一列的作用,在create table时创建,第二三行为具体数据内容,使用insert into语句插入数据库。
一个数据库可以存储多张数据表,数据表就是上一讲学习的网格形式的数据表格。而数据库系统可以支持多个数据库。结构如图8.1所示:

d4ca9299e07a1a4f621280ba02d54940.png
图8.1 数据库结构图

8.4 SQL语言

下面从创建、增、删、查、改几方面介绍SQL语言操作数据库的基本方法。

1. 创建数据表

在使用数据表之前,需要先创建该数据表。SQL语句中的关键字(命令)不区分大小写,即CREATE和create意义相同,但是在大多数据库系统中,库名和表名区分大小写。下例中均使用小写。

新建数据表的语法是:

01 create table 表名称 
02 (列名称1 数据类型, 
03 列名称2 数据类型, 
04 列名称3 数据类型, 
05 ....)

上例中建立的表名是tips,其中包含三列数据:第一列的列名是name(名称),类型是字符串text(类似于Python中的string);第二列的列名是address(地址),类型是字符串;第三列的列名是bill(帐单),类型为实型real(类似于Python中的浮点型float)。
除了语法中必须的关键字,上例中还使用了“if not exists”,它的意思是:如果数据表不存在则创建该表,如果存在则不进行建表操作。

2. 插入数据

插入数据的语法是:

01 insert into 表名称 (列1, 列2,...) VALUES (值1, 值2,....)

上例中向表tips中插入了一行数据,列名和值一一对应。

3. 查询数据

查询数据是最常用的数据库操作,它用于读出表中的具体数据。它的语法是:

01 select 列名称from表名称

可以用“*”表示表中的所有列,即查询表中的所有内容,它的语法是:

01 select * from表名称

还有一种常用的语法是查询适合条件的数据,它的语法是:

01 select 列名称from表名称where列名称 运算符 值

例如,使用以下语句可查询地址为北京的所有数据:

01 select * from tips where address = 'Beijing'

4. 修改数据

修改数据的语法是:

update 表名称 SET 列名称 = 新值 WHERE 列 运算符 值

它可以将表中符合where条件的记录中,某列的值替换成指定的新值。

5. 删除数据

删除数据的语法是:

01 delete from 表名称 where 列名称 运算符 值

它可以删除符合where条件的行(数据库中的行也叫“记录”)。

如果需要删除所有行,可使用:

01 delete from 表名称

或者:

02 delete * from 表名称

6. 删除数据表

删除整个数据表的语法是:

01 drop table表名称

以上介绍了常用的SQL语句,其它SQL语句,可以自行从网上查找使用方法。

课后练习:

练习三:找出本小节开头的程序中所有的SQL语句。

练习四:在SQLite中建立数据表,并填充以下内容,然后查找数据表中数学高于95分的所有行。

3c0a2c7918afa50a06be3b9a3f4c9e09.png
表8.2数据表内容

8.5 思维训练

8.5.1 无法言传的技能

大脑中的部件各司其职,它们相互之间只能达到一定程度的协作,而不能也不需要完全相互理解,语言也只是其中的一部分。语言的复杂是因为说话者需要整理脑中的思维结构、转换成语言,并且在听者的脑中构建同样的结构,其中可能涉及很多背景信息。在两人的思维方式或者生活背景类似时,更容易沟通,可能一见如故,人在同类多的环境里也更自在;反之,有人相识多年,却渐行渐远。

很多技能像绘画、演奏、烹调,其中的意会胜过言传,有时技能无法用语言描述,甚至无法解释。“我也说不清为什么这么画,不知当时自己是怎么想到的,手就自动画下来了。”当我们无法拆解、归因、再造、迁移的时候,这项技术就变得很神奇。人们把它归因于“天赋”、“悟性”,也羡慕那些有着超凡能力的人。

当你掌握了绘画、音乐的方法,能用它们表达脑中的世界,并且在他人脑中重建相似结构,引发共鸣,它就变成了你的语言。那么,当机器足够复杂,并接受更大规模训练,也许它也能掌握这门语言。

缺少语言的支持,很多时候老师就难以在学生的头脑中重构与他脑中相同的思维结构,又说不出到底哪里不对。有时,老师也不知道自己是怎么做到的,于是,只能沿用当初自己的学习过程来教导学生。其实通向终点的道路不止一条,同一位老师也不一定能教会每一位学生,如果可以换一位思维匹配度更高的老师,也许就能解决问题。

8.5.2 漫长的平台期

上一讲提到编程至少在初期是渐进式,而非顿悟式。但我们都或多或少地听说过有关“顿悟”的故事,似乎就在某个不经意间,突然开窍了。有些技能不是平滑地上升,而是阶梯式进步,当面对漫长的平台期。坚持了一段时间,也没有太多提高,是否怀疑自己没这个天份,然后放弃?而那些所谓的天赋异禀,又是否只是掌握了一些我们不知道的技巧?

在练字的时候,照着字贴练得还不错,下次不注意又“回去”了。这时候老师家长也很无奈,方法我教了,你也会了,但是怎么不用呢?这就如同:“并不是我知道自己结巴,就不结巴了”,需要通过练习把“知道”变成“习惯”。

为什么不能一学就会呢?在软件升级的过程中,不可能一边运行一边修改。当一个重要软件已经开始正常工作,这时开发它的升级版,新功能的任何小问题都可能影响用户的正常使用,所以一般让新旧软件同时运行一段时间,保证新软件完全正常的情况下再替换旧版本。软件使用的时间越长,复杂度越高,越多其它软件依赖它,它就越难被替换。当新的思维积累到一定程度,慢慢变得成熟,遇到某个时机,就自然替代了旧的方式;看似前期毫无作用,其实是在后台默默地构建和测试。

很多人在童年阶段尝试过多种兴趣班,有的半途放弃,有的花了几年时间学习。在这个过程中到底得到了什么,或者想得到什么?家长可能有以下几种想法:万一是世界冠军的材料,别把孩子耽误了;培养一个兴趣爱好或者一技之长;开阔眼界;太闹在家待不住;或者只是因为周围的人都在学……

也许这个过程正是学习“如何掌握技能”的过程,如果不用足够的时间,足够的难度去学习某一种技能,可能永远都无法掌握复杂的技能。最好有一个相对长时间的计划,在这个过程中即使遇到平台期,也尽量坚持,从中培养学习的方法和学习的习惯。

8.5.3 不断学习

换一种方法,不但涉及大量的学习成本,还可能破坏原本稳定的结构,带来未知的错误,影响正常工作,如果带来的好处又不明显或者不确定,大多数情况下人们都选择保持不变。很多程序员喜欢用文件存储,如果不是数据量实在太大、无法操作,通常不会用到数据库或者数据仓库,也是同样的道理。

古代社会发展非常缓慢,爷爷的生活技能传给孙子同样适用,现代科技成指数形爆发。小时候学的东西,还没等长大可能就过时了。只在上学阶段学习,这种想法已不再适用,这并非制造焦虑。“世界上唯一不变的就是变化”,学习和不断适应就像锻炼身体一样,是一辈子的事。

8.6 小结

8.6.1 单词

本讲需要掌握的英文单词如表8.3所示。

13a28934a63edbdcee4016db6f7f37dc.png
表8.3本讲需要掌握的英文单词

8.6.2 习题答案

  1. 练习一:为自己申请免费的百度网盘空间,并在其中备份一些数据。

第一步:在百度搜索“百度网盘”。
第二步:注册百度帐号,申请免费网盘。
第三步:新建文件夹,并重命名。
第四步:上传相片到新建的文件夹。

2. 练习二:说说数据库语言和编程语言的区别,列出几种常用的数据库的名字。

数据库语言只能操作数据库,编程语言可以编写游戏,控制硬件等等功能更多。
数据库有FoxPro,Oracle,MySQL,SQLite。

3. 练习三:找出本小节开头的程序中所有的SQL语句。

01 import sqlite3 
02 
03 conn = sqlite3.connect('test.db') 
04 conn.execute('''create table if not exists tips 
05        (name text, 
06        address text, 
07        bill real);''') 
08 conn.execute("insert into tips (name,address,bill)  
09        values ('Zhang', 'Beijing', 1004.00 )"); 
10 conn.execute("insert into tips (name,address,bill)  
11        values ('Wang', 'Shanghai', 1200.00 )"); 
12 cursor = conn.execute("select * from tips") 
13 for row in cursor: 
14     print(row) 
15 conn.commit() 
16 conn.close()

在execute函数中执行的就是SQL语句。

4. 练习四:在SQLite中建立数据表,并填充以下内容,然后查找数据表中数学高于95分的所有行。(小李同学作业)

01 import sqlite3 
02 
03 conn=sqlite3.connect('test1.db') 
04 conn.execute('''create table if not exists tips 
05     (name text, 
06     yuwen real, 
07     shuxue real, 
08     yingyu real );''') 
09 conn.execute("delete from tips") 
10 conn.execute("insert into tips(name,yuwen,shuxue,yingyu) 
11         values('zhangsan','81','90','95')"); 
12 conn.execute("insert into tips(name,yuwen,shuxue,yingyu) 
13         values('lisi','93','96','97')"); 
14 conn.execute("insert into tips(name,yuwen,shuxue,yingyu) 
15         values('wangwu','95','100','100')"); 
16 cursor=conn.execute("select * from tips where shuxue > 95") 
17 for row in cursor: 
18      print(row) 
19 conn.commit() 
20 conn.close()

需要注意:每次插入数据时先要删除数据库中的内容,否则每次执行程序时数据都会被插入一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值