《Using Databases with Python》 Week2 Basic Structured Query Language 课堂笔记
Coursera课程《Using Databases with Python》 密歇根大学
Week2 Basic Structured Query Language
15.1 Relational Databases
Terminology
- 数据库(Database) - 包含很多个表
- 关系或表(Relation or Table) - 包含很多元组和属性
- 元组或行(Tuple or Row) - 一组数据,它们一般代表着一个“实体”
- 属性或列(Attribute or Column) - 与行所展示的实体相关的许多元素之一

SQL
SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
15.2 Using Databases
Two Roles in Large Projects
- Application Developer应用开发员 - 创建应用的逻辑、外观和感受 - 解决应用有关的问题
- Database Administrator数据库管理员 - 在程序运作过程中管理和调试数据库
- 通常两类人都参与“数据模型(Data model)”的构建
Large Project Structure

Data Analysis Structure

Common Database Systems
有三个主要的数据库管理系统被广泛使用:
- Oracle - 大型,商业化,企业级,非常tweakable(?) - 一般用于企业
- Mysql - 更简洁但是也更快捷和可扩展 - 商业的开源项目 - 一般用于网页
- SqlServer - 很好 - 来自Microsoft(以及Access)
还有一些更小的项目,但是免费而且开源,比如说HSQL,SQLite,Postgress,...
15.3 Single Table CRUD
SQLite Browser
SQLite是一个非常常用的数据库,它是免费的,而且又快又小。
SQLite Browser允许我们直接操作SQLite文件,网站是http://sqlitebrowser.org/
SQLite已经植入了包括Python在内的很多语言。
安装好了之后,然后我们新建一个数据库,随意存在一个自己找得到的地方就行。新建了之后,弹出来的对话框暂且不管,关掉它。
Start Simple - A Single Table
现在我们来新建一个表。
选择执行SQL这个标签,输入下面的SQL代码。
CREATE TABLE Users(
name VARCHAR(128),
email VARCHAR(128)
)
这样,我们就创建了一个叫User的表,以及有两列。其中一列是name,最多可以有128个字符;另外一列是email,也是最多有128个字符。也就是说,我们定好了一个表的框架。
然后我们可以向这个表里添加一点数据。在浏览数据的标签页里,使用新建记录可以添加我们想要的数据。而这种方式是用户交互的方式,有点像我们使用Excel。但是这些其实相当于是应用在给我们写SQL,也就是SQL日志里显示的这些。
SQL Insert
向一个表里加一行新的记录的SQL语句如下
INSERT INTO Users(name,email) VALUES('Kristin','kf@umich.edu')
仍然在执行SQL标签页里去执行这句语句,可以看到我们这样就新建了一条记录。
SQL Delete
在一个表里删除一条特定的记录的SQL语句如下
DELETE FROM Users WHERE email='kf@umich.edu'
执行这句,我们可以发现刚刚添加的这条记录就被删除了。
这个WHERE有点像if语句,找到符合条件的记录。
SQL Update
对一个表内已有的数据进行修改的SQL语句如下
UPDATE Users SET name='Charles' WHERE email='huangyingjing@whu.edu.cn'
执行这句,就可以把找到对应email的name改为Charles。这里仍然使用到了WHERE。
Retrieving Records: Select
select语句可以取到一部分记录,同样使用WHERE就能进行筛选。
SELECT * FROM Users
SELECT * FROM Users WHERE email='huangyingjing@whu.edu.cn'
Sorting with ORDER BY
我们可以在SELECT语句中加上ORDER BY语句,这样我们的结果就能按一定的顺序排列。
SELECT * FROM Users ORDER BY email
SELECT * FROM Users ORDER BY name
Worked Example: Counting Email in a Database
import sqlite3
conn = sqlite3.connect('emaildb.sqlite')
cur = conn.cursor()
cur.execute('DROP TABLE IF EXISTS Counts')
cur.execute('''
CREATE TABLE Counts (email TEXT, count INTEGER)''')
fname = input('Enter file name: ')
if (len(fname) < 1): fname = 'mbox-short.txt'
fh = open(fname)
for line in fh:
if not line.startswith('From: '): continue
pieces = line.split()
email = pieces[1]
cur.execute('SELECT count FROM Counts WHERE email = ? ', (email,))
row = cur.fetchone()
if row is None:
cur.execute('''INSERT INTO Counts (email, count)
VALUES (?, 1)''', (email,))
else:
cur.execute('UPDATE Counts SET count = count + 1 WHERE email = ?',
(email,))
conn.commit()
# https://www.sqlite.org/lang_select.html
sqlstr = 'SELECT email, count FROM Counts ORDER BY count DESC LIMIT 10'
for row in cur.execute(sqlstr):
print(str(row[0]), row[1])
cur.close()
上面是一个建表并且更新或增加表项的过程,这个过程就会在当前目录下新建一个emaildb.sqlite的sql文件。
需要注意的是第26行的commit(),只有在执行它之后才会将结果写入文件,所以放到循环外卖执行会快很多。
作业:Counting Email in a Database
注意:一定要把mbox.txt下载下来,而不是复制网页文本。不然最后统计的邮件会出错。
import sqlite3
import re
conn = sqlite3.connect('emaildb.sqlite')
cur = conn.cursor()
cur.execute('''
DROP TABLE IF EXISTS Counts''')
cur.execute('''
CREATE TABLE Counts (org TEXT, count INTEGER)''')
fname = input('Enter file name: ')
if (len(fname) < 1): fname = 'mbox-short.txt'
fh = open(fname)
for line in fh:
if not line.startswith('From: '): continue
all_org = re.findall("@(.+)\s", line)
org = all_org[0]
cur.execute('SELECT count FROM Counts WHERE org = ? ', (org,))
row = cur.fetchone()
if row is None:
cur.execute('''INSERT INTO Counts (org, count)
VALUES (?, 1)''', (org,))
else:
cur.execute('UPDATE Counts SET count = count + 1 WHERE org = ?',
(org,))
conn.commit()
# https://www.sqlite.org/lang_select.html
sqlstr = 'SELECT org, count FROM Counts ORDER BY count DESC LIMIT 10'
for row in cur.execute(sqlstr):
print(str(row[0]), row[1])
cur.close()
《Using Databases with Python》 Week2 Basic Structured Query Language 课堂笔记的更多相关文章
- 数据库系统概述(Data Model、DBMS、DBS、RDBS、Structured Query Language)
数据Data 描述事物的符号记录成为数据. 数据是数据库中存储的基本对象. 除了基本的数字之外.像图书的名称.价格.作者都可以称为数据. 将多种数据记录列成一张表.通过数据表管理数据. 每一行的数 ...
- SQL Structured Query Language(结构化查询语言) 数据库
SQL是Structured Query Language(结构化查询语言)的缩写. SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出“做什么”的命令,“怎么 ...
- JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language
JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据 ...
- Why sql is called structured query language?1 - 12
SQL has much to do with a researcher at IBM, Edgar F. (Ted) Codd, an Oxford-trained mathematician, w ...
- PL/SQL(Procedure Language & Structured Query Language)
目前的PL/SQL包括两部分,一部分是数据库引擎部分:另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎.可以将这两部分称为:数据库PL/SQL和工具PL/SQL. PL/SQL中 ...
- Oracle笔记--PL/SQL(Procedure Language & Structured Query Language)
1.PL/SQL是一种高级数据库程序设计语言,专门用于在各种环境下对Oracle数据库进行访问.该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理. 2.PL/SQL是对SQ ...
- 潭州课堂25班:Ph201805201 python 操作数据库 第五课 (课堂笔记)
一 用 python 操作 mysql 1,导入 pymysql 2,检查配置文件, 3,端口转发 如果 python 在本机,数据库在远程,或虚拟机则需要 4用 python 连接 # -*- co ...
- 《Python Data Structures》Week5 Dictionary 课堂笔记
Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week5 Dictionary 9.1 Dictionaries 字 ...
- 《Python Data Structures》 Week4 List 课堂笔记
Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week4 List 8.2 Manipulating Lists 8 ...
随机推荐
- Delphi 注释
- 2019.9.16 linux安装软件lamp
2019/9/16 Linux软件安装 方式:yum/rpm/源码安装 yum安装: yum 是通过分析RPM的包头数据后,根据各软件的相关性制作出属性相对应的解决方案,然后可以自动处理软件的相依属性 ...
- LDO ,开关电源DC-DC的优缺点
一般LDO电源自身的功耗为(Vin-Vout)*Iout,因此这两者越大,功耗也越大,效率也就越低. LDO ,开关电源DC-DC的优缺点(2008-11-06 22:40:23)转载标签: 电源杂谈 ...
- Angular7和PrimeNg集成
常规操作之后,随便加了一个控件发现报错了.错误信息看起来是不能识别PrimeNg的组件,经过一番折腾发现.因为用到了ngModel,需要导入FormsModule.因为新建的工程没有导入,导入之后就好 ...
- jquery 判断是否为空
jquery 判断是否为空 if(my_val == null || my_val == undefined || my_val==""){ console.log("我 ...
- TCP/IP基础总结性学习(2)
简单的HTTP协议 一.HTTP 协议用于客户端和服务器端之间的通信 客户端和服务器的定义:请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一 端称为服务器端.在两台计算机之间使用 HTTP ...
- 【NOIP2016提高A组模拟8.19】(雅礼联考day2)公约数
题目 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b. 分析 显然a=b是一定不满足, 我们设\(a>b\), 易得gcd(a,b)&l ...
- 3828. 三角形计数 3829. ZCC loves Isaac 3830. 字符消除
3828 给定n个点的坐标(0<=xi,yi<=10000)求选出任意三个点能组成的三角形的总面积. 题解 太naive了 枚举三角形的y最小的点,把剩余的点按角度排序 然后随便算,可以用 ...
- Memcached在Asp.net下的应用
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...
- Java多线程的创建方法
Java 线程类也是一个 object 类,它的实例都继承自java.lang.Thread 或其子类. 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: ...