学校选修课的复习笔记 大部分内容来自PPT
1.读取不同种类的数据
常见的数据有三种,分别是数据库文件(.sql文件)、文本文件(包括CSV文件)(.csv文件)、Excel文件(.xlsx文件)
2.关系型数据库管理系统(RDBMS)
RDBMS即Relational Database Management System,具有以下特点:
数据以许多行和列组成一张表单,每行为各种记录名称,每列为对应数据域,若干表单组成Database。
3.RDBMS术语
数据表:表是数据的矩阵,在一个数据库中的表看起来像是一个简单的电子表格。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性
主键:主键是唯一的。一个数据表中只能包含一个主键,你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性:参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
4.MySQL数据库
MySQL是一个关系型数据库管理系统,支持多种语言,且是开源的。
5.常用数据库命令
mysql> SHOW DATABASE; 显示当前数据库服务器中的数据库列表
mysql> CREATE DATABASE; 建立数据库
mysql> USE 库名;
mysql> CREATE TABLE 表名(字段名 VARCHAR(20),字段名CHAR(1));
mysql> DROP DATABASE 库名; 删除数据库
mysql> DROP TABLE 表名; 删除数据表
mysql> DELETE FROM 表名; 清空表中记录
mysql> INSERT INTO 表名 VALUES ("hyq","M");
mysql -> UPDATE 表名 SET 字段名1='a',字段名2='b', WHERE 字段名3 = 'c'; 更新表中数据
mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE 表名; 用文本形式将数据装进数据表
mysql> USE 数据库名;
mysql> SOURCE d:/mysql.sql 导入.sql文件命令
6. 读写数据库数据
在建立Python与MySQL连接时,需要安装SQLAlchemy库和pymysql库
(1).数据库数据读取
使用create_engine函数建立一个数据库连接。
数据库连接字符串如下:
数据库产品名+连接工具名://用户名:密码@数据库IP地址:数据库端口号/数据库名称?charset = 数据库数据编码
例如:'mysql+pymysql://root:[email protected]:3306/testdb?charset=utf-8'
数据库读取函数:
pandas.read_sql_table(table_name,con,schema=None,index_col=None,coerce_float=True,columns=None)
read_sql_table只能读取数据库的某一个表格,不能实现查询的操作
pandas.read_sql_query(sql,con,index_col=None,coerce_float=True)
read_sql_query只能实现查询操作,不能直接读取数据库中某个表
pandas.read_sql(sql,con,index_col=None,coerce_float=True,columns=None)
read_sql是两者的综合,即能够读取数据库中的某一表,也能够实现查询操作
Pandas三个数据库读取函数参数几乎完全一致,唯一的区别在于传入的是语句还是表名
sql or table_name 接收string,表示读取的数据的表明或者sql 语句,无默认。
con 接收数据库连接,表示数据库连接信息。无默认。
index_col 接收int,sequence或者False,表示设定哪一列作为index,如果设置多个索引,这个参数就是一个数列。默认为None。
coerce_float 接收boolean。将数据库中的decimal类型的数据转换为pandas中的float64类型的数据。默认为True。
columns 接收list,表示读取数据的列名。默认为None。
(2).数据库数据存储
DataFrame.to_sql(name,con,schema=None,if_exists='fail',index=True,index_label=None,dtype=None)
name 接收string,代表数据库表名。无默认。
con 接收数据库连接。无默认。
if_exists 接收fail,replace,append。fail表示如果表名存在则不执行写入操作;replace表示如果存在,将原数据库库表删除,再重新创建;append则表示在原数据库表的基础上追加数据。默认为fail。
index 接收boolean。表示是否将行索引作为数据传入数据库。默认为True。
index_label 接收string或sequence。代表是否引用索引名称,如果index参数为True,此参数为None,则使用默认名称。如果为多重索引必须使用sequence形式。默认为None。
dtype 接收dict。代表写入的数据类型(列名为Key,数据格式为values)。默认为None。
detail1.to_sql('test1',con=engine,index=False,if_exists='replace')
formlist1 = pd.read_sql_query('show tables',con=engine)
print('新增一个表格后testdb数据库数据表清单为:','\n',formlist1)
7.读写文本文件
(1).文件读取
文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件。
csv是一种逗号分隔的文件格式,因为其分隔符不一定是逗号,又被称为字符分隔文件,文件以纯文本形式存储表格数据(数字和文本)
csv文本是一种通用、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据,而这些程序本身实在不兼容的格式上进行操作的(往往是私有的、无规范的格式)。
因为大量程序都支持csv或者其变体,因此可以大多数程序的输入和输出格式。
使用read_table来读取文本文件,使用read_csv函数来读取csv文件。
pandas.read_table(filepath_or_buffer,sep='\t',header='infer',names=None,index_col=None,dtype=None,engine=None,nrows=None)
pandas.read_csv(filepath_or_buffer,sep=',',header='infer',names=None,index_col=None,dtype=None,engine=None,nrows=None)
filepath 接收string 代表文件路径。无默认
sep 接收string 代表分隔符。read_csv默认为",",read_table默认为制表符"[Tab]"
header 接收int或sequence。表示将某行数据作为列名。默认为infer,表示自动识别。
names 接收array。表示列名。默认为None。
index_col 接收int、sequence或False。表示索引列的位置,取值为sequence则代表多重索引。默认为None
dtype 接收dict。代表写入的数据类型(列名为key,数据格式为values)。默认为None。
engine 接收为c或者python。代表数据解析引擎,默认为c。
nrows 接收int。表示读取前n行。默认为None。
encoding表示文件的编码格式,常用的编码有utf-8、utf-16、gbk、gb2312、gb18030等
(2).文件存储
DataFrame.to_csv(path_or_buf=None,sep=',',na_rep='',columns=None,header=True,index=True,
index_label=None,mode='w',encoding=None)
path_or_buf 接收string。代表文件路径。无默认。
sep 接收string。代表分隔符。默认为","。
na_rep 接收string。代表缺失值。默认为""。
columns 接收list。代表写出的列名。默认为None。
header 接收boolean。代表是否将列名写出。默认为True。
index 接收boolean,代表是否将行名(索引)写出。默认为True。
index_labels 接收sequence。表示索引名。默认为None。
mode 接收特定string。代表数据写入模式。默认为w。
encoding 接收特定string。代表储存文件的编码格式。默认为None。
import os
print("订单信息表写入文本文件前目录内文件列表为:\n",os.listdir('tmp'))
order.to_csv('../tmp/orderInfo.csv',sep=';',index=False)
print("订单信息表写入文本文件前目录内文件列表为:\n",os.listdir('tmp'))
(3). Excel文件读取
pandas.read_excel(io,sheetname=0,header=0,index_col=None,names=None,dtype=None)
io 接收string。表示文件路径。无默认。
sheetname 接收string、int。代表excel表内数据的分表位置。默认为0。
header 接收int或sequence。表示将某行数据作为列名。默认为infer,表示自动识别
names 接收int、sequence或者False。表示索引列的位置,取值为sequence则代表多重索引。默认为None
index_col 接收int、sequence或者False。表示索引列的位置,取值为sequence则代表多重索引。默认为None
dtype 接收dict。代表写入的数据类型(列名为key,数据格式为values)。默认为None。
user = pandas.read_excel('data/users.xlsx')
print("客户信息表写入excel文件前目录文件列表为: \n",os.listdir('tmp'))
user.to_excel('tmp/userInfo.xlsx')
print("客户信息表写入excel文件后目录内文件列表为:\n",os.listdir('tmp'))