文章目录

  • 1、读写数据库数据
  • 1.1、数据库链接设置
  • 1.2、数据库数据读取
  • 1.2.1、read_sql_table
  • 1.2.2、read_sql_query
  • 1.2.3、read_sql
  • 1.2.4、读取数据库结果
  • 1.2.5、三者区别
  • 1.3、数据库数据存储
  • 2、读写csv文件
  • 2.1、读取csv数据
  • 2.1.1、使用read_table来读取文本文件
  • 2.1.2、使用read_csv函数来读取csv文件
  • 2.2、文本文件储存
  • 3、读写Excel文件
  • 3.1、Excel文件读取
  • 3.2、Excel文件储存


1、读写数据库数据

1.1、数据库链接设置

  • pandas提供了读取与存储关系型数据库数据的函数与方法。除了pandas库外,还需要使用SQLAlchemy库建立对应的数据库连接。SQLAlchemy配合相应数据库的Python连接工具(例如MySQL数据库需要安装mysqlclient或者pymysql库),使用create_engine函数,建立一个数据库连接。
  • creat_engine中填入的是一个连接字符串。在使用Python的SQLAlchemy时,MySQL和Oracle数据库连接字符串的格式如下:
数据库产品名+连接工具名://用户名:密码@数据库IP地址:数据库端口号/数据库名称?charset = 数据库数据编码

数据库参数如图所示:

datax 适配python3 python datasource_数据库


链接本地数据库:

import pandas as pd
from sqlalchemy import create_engine

engin = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8')

参数说明:

参数

说明

mysql+pymysql

mysql数据库+链接数据库工具

root

用户名

123456

自定义密码

127.0.0.1

本地主机,也可以用localhost

test

存放数据的文件

charset=utf8

设置编码方式为utf-8

查看链接状况:

datax 适配python3 python datasource_读取数据_02


数据库链接成功!!!

提示: 如果没有连接成功,检查一下是否安装了pymysql这个工具,可以使用pip install pymysql 安装。

1.2、数据库数据读取

1.2.1、read_sql_table

  • 只能够读取数据库的某一个表格,不能实现查询的操作。
  • pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, columns=None)
pd.read_sql_table('meal_order_detail1',con=engin)

1.2.2、read_sql_query

  • 只能实现查询操作,不能直接读取数据库中的某个表。
  • pandas.read_sql_query(sql, con, index_col=None, coerce_float=True)
pd.read_sql_query('select * from meal_order_detail1',con=engin)

1.2.3、read_sql

  • 是两者的综合,既能够读取数据库中的某一个表,也能够实现查询操作。
  • pandas.read_sql(sql, con, index_col=None, coerce_float=True, columns=None)
pd.read_sql('meal_order_detail1',con=engin)
pd.read_sql('select * from meal_order_detail1',con=engin)

1.2.4、读取数据库结果

datax 适配python3 python datasource_数据库_03

1.2.5、三者区别

  • pandas三个数据库数据读取函数的参数几乎完全一致,唯一的区别在于传入的是语句还是表名。

参数名称

说明

sql or table_name

接收string。表示读取的数据的表名或者sql语句。无默认

con

接收数据库连接。表示数据库连接信息。无默认

index_col

接收int,sequence或者False。表示设定的列作为行名,如果是一个数列则是多重索引。默认为None

coerce_float

接收boolean。将数据库中的decimal类型的数据转换为pandas中的float64类型的数据。默认为True

columns

接收list。表示读取数据的列名。默认为None

1.3、数据库数据存储

  • 数据库数据读取有三个函数,但数据存储则只有一个to_sql方法
  • DataFrame.to_sql(name, con, schema=None, if_exists=’fail’, index=True, index_label=None, dtype=None)
data = pd.read_sql('meal_order_detail1',con=engin)
data.to_sql('new_data', con=engin, if_exists='replace')#if_exists='replace',如果原文件存在,取代掉它

注意: 命名是不要出现大写,数据库会默认为小写!




2、读写csv文件

  • 文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件。
  • csv是一种逗号分隔的文件格式,因为其分隔符不一定是逗号,又被称为字符分隔文件,文件以纯文本形式存储表格数据(数字和文本)。

2.1、读取csv数据

  • read_table和read_csv常用参数及其说明

参数名称

说明

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

2.1.1、使用read_table来读取文本文件

  • pandas.read_table(filepath_or_buffer, sep=’\t’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)
pd.read_table('./meal_order_info.csv',sep=',',encoding='gbk')

2.1.2、使用read_csv函数来读取csv文件

pandas.read_csv(filepath_or_buffer, sep=’,’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)

2.2、文本文件储存

  • 文本文件的存储和读取类似,结构化数据可以通过pandas中的to_csv函数实现以csv文件格式存储文件
  • 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



3、读写Excel文件

3.1、Excel文件读取

  • pandas提供了read_excel函数来读取“xls”“xlsx”两种Excel文件。
  • pandas.read_excel(io, sheetname=0, header=0, index_col=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

pd.read_excel('./meal_order_detail.xlsx')

3.2、Excel文件储存

  • 将文件存储为Excel文件,可以使用to_excel方法。其语法格式如下:
  • DataFrame.to_excel(excel_writer=None, sheetname=None’, na_rep=”, header=True, index=True, index_label=None, mode=’w’, encoding=None)
  • to_csv方法的常用参数基本一致,区别之处在于指定存储文件的文件路径参数名称为excel_writer,并且没有sep参数,增加了一个sheetnames参数用来指定存储的Excel sheet的名称,默认为sheet1。

(1) 写入单个sheetname

data = pd.read_excel('./meal_order_detail.xlsx')
data.to_excel('new_data.xlsx',sheet_name='a')

(2) 写入多个sheetname

with pd.ExcelWriter('./table.xlsx') as w:
    data.to_excel(w,sheet_name='a')
    data.to_excel(w,sheet_name='b')