数据获取_数据库的读取与存储
2020-04-08 本文已影响0人
南有妖尾
一、读取MySQL数据库
MySQL数据库是开源的关系型数据库,可以通过python与其进行连接。首先需要安装第三方库pymysql → pip install pymysql并且电脑上已经安装好该数据库
# 设置cell多行输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
# 导入相关库
import numpy as np
import pandas as pd
import os
import pymysql # 导入pymysql库
(1)方法1 → 利用游标cursor读取
利用游标cursor读取,需要用cursor的execute的方法执行sql,用cursor的fetchall获取执行的所有信息
第一步:连接MySQL数据库
config = {'host':'192.168.0.102',
'user':'Yeung',
'password':'sjm13802448449ys',
'port':3306,
'database':'python_data',
'charset':'utf8'}
# 设置连接数据库的参数
# 连接mysql数据库服务端
# 分别输入主机ip,用户名,登录账号,端口,要连接的数据库名称以及编码
conn = pymysql.connect(**config) # 建立连接
第二步:创建游标cursor
cur = conn.cursor() # 创建游标用于执行SQL语言
# 编辑sql语句
sql = 'SELECT * FROM data_01' # 查找data_01这个表的所有信息
# cursor的execute()执行sql语句命令
data = cur.execute(sql)
conn.commit() # 完成命令
第三步:用游标的fetchall方法获取所有执行sql得到的所有信息
data = cur.fetchall() # 返回结果为一个元祖
data
((1, '李承峰', '男', datetime.date(1958, 12, 2), 61, '副教授', '计算机系', 15000, 13),
(2, '王平', '女', datetime.date(1971, 5, 5), 48, '助教', '计算机系', 9000, 12),
(3, '刘冰云', '女', datetime.date(1977, 8, 14), 42, '助教', '建筑系', 8000, 6),
(4, '珂克桓', '男', datetime.date(1990, 6, 9), 29, '助教', '经管系', 9800, 8),
(5, '张旭', '男', datetime.date(1969, 3, 12), 61, '副教授', '电子工程系', 12500, 9),
(6, '黄剑峰', '男', datetime.date(1982, 5, 1), 37, '教授', '外语系', 21000, 6),
(7, '朝阳路', '男', datetime.date(1984, 8, 10), 33, '副教授', '计算机系', 10500, 13),
(8, '耶和华', '女', datetime.date(1980, 11, 3), 31, '助教', '外语系', 8000, 7),
(9, '西奥菲', '女', datetime.date(1983, 5, 18), 36, '助教', '土木工程系', 9000, 6),
(10, '张三', '男', datetime.date(1989, 9, 12), 30, '助教', '计算机系', 15000, 10),
(11, '陈冰冰', '女', datetime.date(1978, 10, 12), 41, '副教授', '计算机系', 15000, 12),
(12, '李晓峰', '男', datetime.date(1980, 10, 10), 39, '教授', '土木工程系', 20000, 13),
(13, '顾小梦', '女', datetime.date(1980, 10, 10), 34, '教授', '建筑系', 22000, 14))
第四步:将结果元祖列表化后传给DataFrame获得数据框
data = list(data)
data_result = pd.DataFrame(data,columns=['编号',
'姓名',
'性别',
'生日',
'年龄',
'职位',
'部门',
'工资',
'工作时间'])
print(data_result.head())
cur.close() # 关闭游标
conn.close() # 关闭与数据库的连接
编号 姓名 性别 生日 年龄 职位 部门 工资 工作时间
0 1 李承峰 男 1958-12-02 61 副教授 计算机系 15000 13
1 2 王平 女 1971-05-05 48 助教 计算机系 9000 12
2 3 刘冰云 女 1977-08-14 42 助教 建筑系 8000 6
3 4 珂克桓 男 1990-06-09 29 助教 经管系 9800 8
4 5 张旭 男 1969-03-12 61 副教授 电子工程系 12500 9
(2)方法2 → pd.read_sql()
- read_sql(sql,con, index_col=None……),将SQL数据库和查询读取到DataFrame
- 参数:
- sql,要执行的SQL语句
- con,数据库连接的参数
第一步:连接MySQL数据库
config = {'host':'192.168.0.102',
'user':'Yeung',
'password':'sjm13802448449ys',
'port':3306,
'database':'python_data',
'charset':'utf8'}
# 设置连接数据库的参数
# 连接mysql数据库服务端
# 分别输入主机ip,用户名,登录账号,端口,要连接的数据库名称以及编码
conn = pymysql.connect(**config) # 建立连接
第二步:read_sql读取SQL查询,并返回DataFrame数据框
sql_2 = 'SELECT * FROM data_02'
data_2 = pd.read_sql(sql_2,conn)
print(data_2.head())
conn.close() # 关闭连接
Tno Tname Tsex Age Prof college
0 1001 赤峰 男 61 副教授 中山大学
1 1002 王平风 女 48 助教 北京大学
2 1003 刘冰云 女 42 助教 南京大学
3 1004 珂克桓 男 29 助教 中山大学
4 1005 张旭雨 男 50 讲师 上海交通大学
(3)方法3 → pd.read_sql_query()
- read_sql_query(sql,con, index_col=None……),将SQL查询读取到DataFrame数据框
- 参数:
- sql,要执行的SQL语句
- con,数据库连接的参数
第一步:连接MySQL数据库
config = {'host':'192.168.0.102',
'user':'Yeung',
'password':'sjm13802448449ys',
'port':3306,
'database':'python_data',
'charset':'utf8'}
# 设置连接数据库的参数
# 连接mysql数据库服务端
# 分别输入主机ip,用户名,登录账号,端口,要连接的数据库名称以及编码
conn = pymysql.connect(**config) # 建立连接
第二步:read_sql_query读取SQL查询,并返回DataFrame数据框
sql_3 = 'SELECT * FROM customers'
data_3 = pd.read_sql_query(sql_3,conn)
print(data_3.head())
conn.close() # 关闭连接
cust_id cust_name cust_address cust_city cust_state \
0 1000000001 Village Toys 200 Maple Lane Detroit MI
1 1000000002 Kids Place 333 South Lake Drive Columbus OH
2 1000000003 Fun4All 1 Sunny Place Muncie IN
3 1000000004 Fun4All 829 Riverside Drive Phoenix AZ
4 1000000005 The Toy Store 4545 53rd Street Chicago IL
cust_zip cust_country cust_contact cust_email
0 44444 USA John Smith sales@villagetoys.com
1 43333 USA Michelle Green None
2 42222 USA Jim Jones jjones@fun4all.com
3 88888 USA Denise L. Stephens dstephens@fun4all.com
4 54545 USA Kim Howard None
二、读取数据库文件
使用sqlite3第三方库读取数据库文件 .db。
SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是在世界上最广泛部署的SQL数据库引擎。SQLite源代码不受版权限制。
import sqlite3
os.chdir(r'E:\python_learn\train') # 相对路径
cnn = sqlite3.connect('douban_comment_data.db') # 建立连接
sql_query = 'SELECT * FROM comment'
data = pd.read_sql_query(sql_query,cnn)
data.head()
返回数据前5条.png