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 课堂笔记的更多相关文章

  1. 数据库系统概述(Data Model、DBMS、DBS、RDBS、Structured Query Language)

    数据Data 描述事物的符号记录成为数据. 数据是数据库中存储的基本对象.   除了基本的数字之外.像图书的名称.价格.作者都可以称为数据. 将多种数据记录列成一张表.通过数据表管理数据. 每一行的数 ...

  2. SQL Structured Query Language(结构化查询语言) 数据库

    SQL是Structured Query Language(结构化查询语言)的缩写. SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出“做什么”的命令,“怎么 ...

  3. JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language

    JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据 ...

  4. 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 ...

  5. PL/SQL(Procedure Language & Structured Query Language)

    目前的PL/SQL包括两部分,一部分是数据库引擎部分:另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎.可以将这两部分称为:数据库PL/SQL和工具PL/SQL. PL/SQL中 ...

  6. Oracle笔记--PL/SQL(Procedure Language & Structured Query Language)

    1.PL/SQL是一种高级数据库程序设计语言,专门用于在各种环境下对Oracle数据库进行访问.该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理. 2.PL/SQL是对SQ ...

  7. 潭州课堂25班:Ph201805201 python 操作数据库 第五课 (课堂笔记)

    一 用 python 操作 mysql 1,导入 pymysql 2,检查配置文件, 3,端口转发 如果 python 在本机,数据库在远程,或虚拟机则需要 4用 python 连接 # -*- co ...

  8. 《Python Data Structures》Week5 Dictionary 课堂笔记

    Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week5 Dictionary 9.1 Dictionaries 字 ...

  9. 《Python Data Structures》 Week4 List 课堂笔记

    Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week4 List 8.2 Manipulating Lists 8 ...

随机推荐

  1. SpringMVC基础01——SpringMVC的知识结构体系

    1.前言 目前在各大互联网公司使用最热门的技术莫过于SpringBoot以及在其基础之上的SpringCloud,然而学习这些技术的基础在于学好Spring和SpringMVC,准确来说SpringM ...

  2. Delphi 保留字

  3. install-info - 更新 info/dir 项

    SYNOPSIS 总览 install-info [OPTION]... [INFO-FILE [DIR-FILE]] DESCRIPTION 描述 从 Info 目录文件 DIR-FILE 中的文件 ...

  4. 点亮指路灯led

    为什么要使用LED? (bootloader,kernel)开发初期,由于串口等硬件尚未被初始化,因此调试手段相当有限,这时通常会采用LED来做为程序调试的重要手段. LED驱动设计: 1.设置GPI ...

  5. mongodb,robomongo 数据查询

    可视化管理工具:Robomongo 是开源,免费的MongoDB管理工具,下载地址:Robomongo下载 1.  基本查询:    构造查询数据.    > db.test.findOne() ...

  6. nslookup 工具的使用方法记录

    查询IP地址 nslookup最简单的用法就是查询域名对应的IP地址,包括A记录和CNAME记录,如果查到的是CNAME记录还会返回别名记录的设置情况.其用法是: nslookup 域名 定查询记录类 ...

  7. 【POJ2486】Apple Tree

    题目大意:给定一棵 N 个节点的有根树,点有点权,边权均为1.现允许从根节点出发走 K 步,求可以经过的点权之和最大是多少. 题解:可以将点权看作是价值,将可以走的步数看作是重量,则转化成了一个树上背 ...

  8. 移动web开发问题和经验总结

    前言 这里大部分是自己遇到过的情况,还有一部分借鉴了同行的文章,如果大家有遇到其它坑,欢迎提出来一起研究. 知识要点 1. Meta标签 1.禁止用户缩放页面,页面强制让文档的宽度与设备的宽度保持1: ...

  9. dubbo SPI机制

    源码分析: /** * 获取扩展类 */ @SuppressWarnings("unchecked") public T getExtension(String name) { i ...

  10. Linux内核编程-0:来自内核的 HelloWorld

    Linux内核编程一直是我很想掌握的一个技能.如果问我为什么,我也说不上来. 也许是希望有一天自己的ID也出现在内核开发组的邮件列表里?或是内核发行文件的CREDITS文件上? 也许是吧.其实更多的, ...