vlambda博客
学习文章列表

用Python读取MySQL中的数据

        Python处理数据分析的优势,很多人都知道(可以实现更复杂、更灵活的操作,包括数据预处理、数据可视化输出等),但是加载到Python中的数据,只是临时存储在内存中的一张虚拟表(退出之后就会被释放掉了,直到下次有需要就得重新加载)。

        Excel是具有数据的处理和存储功能,但处理能力不如Python,存储能力又不如SQL。要是能把 Python的数据分析能力SQL的数据存储能力结合起来,那该有多好呀(可以提升自己搞数据的上限)!

        因为我们一般习惯用开源(也就是免费)的,所以我用的是MySQL数据管理系统。

        在我一位朋友的远程指导下,今天上午,我终于如愿成功地实现用Python读取MySQL里面的数据了。感谢(以后有干货,大家应该多多一起分来,好实现共同进步,提高社会竞争力……)!

        闲话少说,直接真刀实枪来相见。代码操作如下:

        MySQL中的数据表:

        先安装pymysql库。  # pip install pymysql

# 导入需要用到的相关库import pandas as pdimport pymysqlfrom sqlalchemy import create_engine
# 创建连接# root: 后面跟本机中MySQL的密码# 第二个mysql(最后一个)就是本机中的数据库名称,因为我直接用的就是mysqlconn = create_engine("mysql+pymysql://root:密码@localhost:3306/mysql(要加载的数据库名称)")
# 选择mysql下的"学生选课"表# 注:"学生选课"是所要读取的表名称,且不管表名称是因为还是中文字符,都不用另外添加双引号或单引号sql = "select * from mysql.学生选课"
# 读取数据df_sql = pd.read_sql(sql,conn)
# 打印输出df_sql

运行结果:

用Python读取MySQL中的数据


完整代码:

# 导入需要用到的相关库import pandas as pdimport pymysqlfrom sqlalchemy import create_engine
# 创建连接# root: 后面跟本机中MySQL的密码# 第二个mysql(最后一个)就是本机中的数据库名称,因为我直接用的就是mysqlconn = create_engine("mysql+pymysql://root:密码@localhost:3306/mysql(要加载的数据库名称)")
# 选择mysql下的"学生选课"表# 注:"学生选课"是所要读取的表名称,且不管表名称是因为还是中文字符,都不用另外添加双引号或单引号sql = "select * from mysql.学生选课"
# 读取数据df_sql = pd.read_sql(sql,conn)# 打印输出df_sql

运行结果:

用Python读取MySQL中的数据


其余以后可能需要用到的相关代码:

#放在后面,相当于当初电子表格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 npimport scipy as spimport pandas as pdimport pymysqlfrom sqlalchemy import create_engineimport matplotlib.pyplot as plt%matplotlib inlineplt.rcParams["font.sans-serif"]="SimHei"plt.rcParams["axes.unicode_minus"]=False%config InlineBackend.figure_format = "svg"from IPython.core.interactiveshell import InteractiveShellInteractiveShell.ast_node_interactivity = "all"import osimport datetime as dtimport timeimport networkx as nximport warningswarnings.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

运行结果:

用Python读取MySQL中的数据


# 加载名为"covid_163"这张表的数据 注意需要用引号df_sql3 = query("covid_163")df_sql3

运行结果:

用Python读取MySQL中的数据


用 to_sql()函数把从其它数据源加载的数据转存到MySQL数据库中

从Excel加载一份虚拟的数据,试一下效果

运行结果:


      文末感悟:

        ① 现在是信息互联共享的时代,有针对性地终生保持学习才不容易被职场淘汰(以后会更加地有底气和有更多的选择性);

        ③ 用Python直接从MySQL中读取数据,感觉好像明显比从Excel中快(可能是MySQL在数据存储方面更加专业吧,而且不像Excel自带各种格式)