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. IBM产品系列和AIX系统版本

      AIX系统版本 AIX 7.2 No supported AIX levels. AIX 7.1 Technology Level     Base Level     Recommended L ...

  2. 【原】iptables 交叉编译

    防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中.在数据包过滤表中,规则被分组放在我们所谓的链(chain)中.而netfil ...

  3. jenkins项目名称改后,同步nginx配置

    jenkins项目名称修改后,workspace的名称会同步更改,构建完了和原来的不是一个路径,如果每个前端项目一个单独的tomcat的话,需要更改nginx配置 /etc/nginx/conf.d

  4. CentOS7安装并使用Ceph

    1.准备工作1.1 安装配置NTP官方建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障. ln -sf /usr/share/zonei ...

  5. 在同一个方法里,有redis,数据库和api,如何保证方法的事务性或者最终一致性?

    https://segmentfault.com/q/1010000017519179/a-1020000017547192

  6. Python _easygui详细版

    1. msgbox msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None) m ...

  7. day2计算机基础作业题

    1.什么是编程? 编程就是程序员用某种编程语言的语法格式将将自己脑中想让计算机做的事情写成文件.所以编程的结果就是一堆的文件,一堆文件就是的程序. 2.计算机的组成: 1).CPU 其中CPU又分为控 ...

  8. NOIP2016提高A组五校联考1总结

    第一题二分,在比赛上明明想到的方法,结果考虑的时候似乎漏了什么,被否决掉了. 只打了个水法,10分. 第二题,最长不上升子序列,原题,类似的题目做过两道,直接搞定. 第三题,一开始想了一种通过在树上打 ...

  9. protocol buffer第一篇:语法介绍

    先理解一下protocol buffer是什么东西. protocol buffer是google发明的一种数据序列化方案,和json是同种类型的玩意,它非常适合在rpc场景下使用.同json一样,p ...

  10. PID221 / 烦人的幻灯片☆ x

    超详细解释!我都被我自己惊呆了! (这个题目意思我缓冲了很久!一定要读懂题!否则做不出来) 题目不懂就多读呀~ 提交你的代码 查看讨论和题解 题目描述 李教授于今天下午做一个非常重要的演讲.不幸的是他 ...