数据获取_数据库数据的读取

读取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 → 利用游标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 → 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 → 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  [email protected]  
1    43333          USA      Michelle Green                   None  
2    42222          USA           Jim Jones     [email protected]  
3    88888          USA  Denise L. Stephens  [email protected]  
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()
ID TIME MOVIEID RATING CONTENT CREATOR ADD_TIME
0 4264 2015-06-10 02:45:06 10440138 1 弱到爆…剧情、氛围烘托、表演、服化道、特效,统统弱到爆!女主和哥哥转折超级无力,给女主默默烫... 身似 2018-01-05 15:05:06
1 4265 2015-06-10 10:39:36 10440138 2 傻逼电影,看在怀旧的份儿上两星半不能更多了……一蟹不如一蟹呀 Ent 2018-01-05 15:05:06
2 4266 2015-06-10 19:33:11 10440138 2 这片存在的意义难道就是告诉我们22年过去了,人类连在商业片方面都处于停滞不前,甚至倒退的状况... 有意识的贱民 2018-01-05 15:05:06
3 4267 2015-06-10 13:22:27 10440138 1 史诗级暴虐烂片。 亿万露电 2018-01-05 15:05:06
4 4268 2015-06-16 14:01:42 10440138 1 什么jb玩意儿。。。。。。如此反智。今时今日。 Marni 2018-01-05 15:05:06
发布了10 篇原创文章 · 获赞 0 · 访问量 18

猜你喜欢

转载自blog.csdn.net/weixin_45556639/article/details/105469170
今日推荐