本关任务:使用 pymysql
创建一个名为 mydb
的数据库。
数据库( Database )是一个集合了各种数据结构来组织、存储以及管理的数据仓库。 我们为什么不用文件的方式来储存数据呢?我们当然可以,但是在文件中的读写速度相对较慢,并且存在某部分数据无法直接提取等缺陷。 所以我们使用关系型数据库来储存以及管理大量数据。所谓的关系型数据库是建立在关系模型基础上的数据库。
在我们开始学习之前我们先了解一些术语:
数据库:数据库是一些关联表的集合。
数据表:表是数据的矩阵。数据库中的表看起来像一个 EXCEL 表格。
列:一列(数据元素) 包含了相同类型的数据, 例如用户信息的手机号。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户的注册信息。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键:主键是唯一的。一个数据表中只能存在一个主键。你可以使用主键来高效的查询数据。
外键:外键常用于作为两个表之间的联系纽带。
复合键:复合键(可称为组合键)将多个列组合成为一个索引。
索引:使用索引可以快速的访问数据表中的特定信息,但是创建过多的索引会导致数据库的效率低下,因为数据库需要维护各个索引。
参照完整性:参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
以下图片就是一张简单的数据表:
表头(header
):每一列的标识名
列(col
):具有相同数据类型的数据的集合
行(row
):每一行用来描述某条记录的具体信息
值(value
):行的具体信息, 每个值必须与该列的数据类型相同
键(key
):键的值(复合键也同样是唯一的值)在当前列中具有唯一性
python
最为强大的一点就是社区的庞大,有着各种方便使用的开源库,使 python
在短短时间内就拥有了大量的用户,并且由于使用库及其简单,可以将其他语言中需要大量代码才能完成的操作浓缩于短短几行代码中。我们这里给出几种用与连接 MySQL 的库:
MySQL-python
mysqlclient
PyMySQL
peewee
SQLAlchemy
可以在命令行中使用pip install (库名)
来安装相应的第三方库。在本教程中我们使用的是pymysql
来操作数据库。
连接数据库之前,请确认以下事项:
你已经拥有有可用的 MySQL 数据库(本实训提供了 MySQL 环境)
拥有操作权限的数据库账号密码(本平台的默认账号为:root
,密码为123123
,mysql
服务器地址为127.0.0.1
,默认端口地址3306
)
运行环境中拥有相应的pymysql
库(本平台已经提供)
以下是一个样例代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
# 创建数据库连接
conn = pymysql.connect(
# mysql服务器主机地址
host='127.0.0.1',
# mysql服务器连接端口
port=3306,
# 用户名
user='user',
# 数据库名(若不选此参数则不指定具体数据库连接,我们可以使用use database来选择其它数据库)
db='db_name',
# 用户密码
passwd='password',
# 编码格式
charset='utf8'
)
# 使用cursor()函数创建一个游标对象
cursor = conn.cursor()
# 使用execute()函数执行一条sql语句,创建一个名为`mydb`的数据库
cursor.execute("create database mydb")
# 关闭游标
cursor.close()
# 关闭数据库连接
conn.close()
注意:在数据库中有字符集,以及排序规则两个设置
字符集:定义了字符以及字符的编码。
在数据库中默认编码的不同可能导致数据乱码的现象,推荐设置字符集为
utf8
创建数据库时在尾部追加
default cha\fracter set utf8
即可设置
排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点:
1、两个不同的字符集不能有相同的排序规则 2、两个字符集有一个默认的排序规则 3、有一些常用的命名规则。如_ci结尾表示大小写不敏感(caseinsensitive),_cs表示大小写敏感(case sensitive),_bin表示二进制的比较(binary).
创建数据库时在尾部追加
collate utf8_general_ci
即可完成排序规则的设置
根据提示,在右侧编辑器补充代码,创建一个名为 mydb
的数据库。
import pymysql
"""
需求:创建一个名为 mydb 的数据库
"""
if __name__ == '__main__':
# **********begin********** #
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123123',
charset='utf8'
)
# 获取连接
cursor = conn.cursor()
# 获取光标
cursor.execute("create database mydb")
# 执行SQL,创建数据库
cursor.close()
# 关闭资源
conn.close()
# **********end********** #