用Python读取MySQL中的数据
Python处理数据分析的优势,很多人都知道(可以实现更复杂、更灵活的操作,包括数据预处理、数据可视化输出等),但是加载到Python中的数据,只是临时存储在内存中的一张虚拟表(退出之后就会被释放掉了,直到下次有需要就得重新加载)。
Excel是具有数据的处理和存储功能,但处理能力不如Python,存储能力又不如SQL。要是能把 Python的数据分析能力与SQL的数据存储能力结合起来,那该有多好呀(可以提升自己搞数据的上限)!
因为我们一般习惯用开源(也就是免费)的,所以我用的是MySQL数据管理系统。
在我一位朋友的远程指导下,今天上午,我终于如愿成功地实现用Python读取MySQL里面的数据了。感谢(以后有干货,大家应该多多一起分来,好实现共同进步,提高社会竞争力……)!
闲话少说,直接真刀实枪来相见。代码操作如下:
MySQL中的数据表:
先安装pymysql库。 # pip install pymysql
# 导入需要用到的相关库
import pandas as pd
import pymysql
from sqlalchemy import create_engine
# 创建连接
# root: 后面跟本机中MySQL的密码
# 第二个mysql(最后一个)就是本机中的数据库名称,因为我直接用的就是mysql
conn = create_engine("mysql+pymysql://root:密码@localhost:3306/mysql(要加载的数据库名称)")
# 选择mysql下的"学生选课"表
# 注:"学生选课"是所要读取的表名称,且不管表名称是因为还是中文字符,都不用另外添加双引号或单引号
sql = "select * from mysql.学生选课"
# 读取数据
df_sql = pd.read_sql(sql,conn)
# 打印输出
df_sql
运行结果:
完整代码:
# 导入需要用到的相关库
import pandas as pd
import pymysql
from sqlalchemy import create_engine
# 创建连接
# root: 后面跟本机中MySQL的密码
# 第二个mysql(最后一个)就是本机中的数据库名称,因为我直接用的就是mysql
conn = create_engine("mysql+pymysql://root:密码@localhost:3306/mysql(要加载的数据库名称)")
# 选择mysql下的"学生选课"表
# 注:"学生选课"是所要读取的表名称,且不管表名称是因为还是中文字符,都不用另外添加双引号或单引号
sql = "select * from mysql.学生选课"
# 读取数据
df_sql = pd.read_sql(sql,conn)
# 打印输出
df_sql
运行结果:
其余以后可能需要用到的相关代码:
#放在后面,相当于当初电子表格
conn = create_engine("mysql+pymysql://root:123456@localhost:3306/mysql",encoding="utf-8")
df_sql.to_sql("hdhgfxhknsf",con=conn,if_exists="append",index=False)
df_hdyclhsf.to_sql("hdyclhsf",con=conn,if_exists="append",index=False)
注:先要在数据库里按照你要存储的格式把字段设置好
其余代码大杂烩:
import numpy as np
import scipy as sp
import pandas as pd
import pymysql
from sqlalchemy import create_engine
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams["font.sans-serif"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
%config InlineBackend.figure_format = "svg"
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import os
import datetime as dt
import time
import networkx as nx
import warnings
warnings.filterwarnings("ignore")
#pd.set_option("display.unicode.east_asian_width",True)#设置列名对齐
#pd.set_option("display.max_columns",None)#显示所有列
#pd.set_option("display.max_rows",None)#显示所有行
#pd.set_option("expand_frame_repr",False)#设置不换行
pd.set_option("display.float_format",lambda z: "%.2f" % z)#不采用科学计数法
os.chdir(r"E:\hczhd")
#单个话单
df_hb = pd.read_excel("20200617100838.xls")
其实要显示全部的行和列,我还是比较习惯用下面这两段代码:
#显示特定行数
pd.options.display.max_rows = 10000
#显示特定列数
pd.options.display.max_columns = 10000
构造一个函数,以便从数据库中选取数据表
#构造一个函数,以便从数据库中选取数据表
def query(hafo):
host = "localhost"
user = "root"
password = "123456"
database = "mysql"
port = 3306
conn = create_engine("mysql+pymysql://{}:{}@{}:{}/{}".format(user,password,host,port,database))
sql = "select * from " + str(hafo)
results = pd.read_sql(sql,conn)
return results
# 加载名为"excel"这张表的数据 注意需要用引号
df_sql2 = query("excel")
df_sql2
运行结果:
# 加载名为"covid_163"这张表的数据 注意需要用引号
df_sql3 = query("covid_163")
df_sql3
运行结果:
用 to_sql()函数把从其它数据源加载的数据转存到MySQL数据库中
从Excel加载一份虚拟的数据,试一下效果
运行结果:
文末感悟:
① 现在是信息互联共享的时代,有针对性地终生保持学习才不容易被职场淘汰(以后会更加地有底气和有更多的选择性);
③ 用Python直接从MySQL中读取数据,感觉好像明显比从Excel中快(可能是MySQL在数据存储方面更加专业吧,而且不像Excel自带各种格式)