#数据存取#-pandas-mysql的数据操作
问题描述:如何便捷的操作数据库数据
公司的内部数据都是存储在数据库中的,我们通过其他渠道提取的数据也需要往数据库中存入,实现便捷的数据存取变得非常重要!!!
依据日常的工作需求,对数据的操作可以分为如下几类:
1、数据查询:从数据库中提取数据,如:select * from test_table where col_a ='a';
2、数据导入:将excel 或者其他类的数据,导入数据库中;
3、创建、修改和删除:create test_table... ,update test_table ...,delete test_table...
问题解决:pandas + mysql + sqlalchemy
依赖库: SQLAlchemy 1.4 Documentation
import pandas as pd
from sqlalchemy import create_engine
#创建engine,连接数据库(此时并没有真正的连接上数据库)
engine= create_engine('mysql+pymysql://用户名:密码@host:port/db_name?charset=utf8')
1、数据查询:
pandas.read_sql
(
sql
,
con
,
index_col=None
,
coerce_float=True
,
params=None
,
parse_dates=None
,
columns=None
,
chunksize=None
)
文档如下: pandas.read_sql - pandas 1.0.2 documentation
sql="select * from test_table ;"
data=pd.read_sql(sql_need,engine) #前面创建的engine
#此时就是把查询所得数据以dataframe 的取出来了,后续可以用pandas 直接处理
print(data)
2、数据导入:
DataFrame.to_sql
(
self
,
name: str
,
con
,
schema=None
,
if_exists: str = 'fail'
,
index: bool = True
,
index_label=None
,
chunksize=None
,
dtype=None
,
method=None
)
文档如下: pandas.DataFrame.to_sql - pandas 1.0.2 documentation
table_name='test_table'
data.to_sql(table_name,con=sql_engine,index=False,if_exists='append')
#此时,就是把上面读出来的data,追加到table_name 中去,注意 if_exists 的使用,具体如下
if_exists{‘fail’, ‘replace’, ‘append’}, default ‘fail’
How to behave if the table already exists.
fail: 如table_name 是存在的,则报错.
replace: 如table_name 是存在的,删除该表,然后创建新表并导入数据.
append: 如table_name 是存在的,向该表追加数据.
另外,在追加数据的时候,务必注意数据类型的问题,否则非常容易出现数据导入错误
"""
3、创建、修改和删除:engine.execute
sql="delete from test_table where col_a='a'" #需要执行的sql语句
engine.execute(sql) #create,update,delete 等不返回数据的操作,均可以使用
代码编写:
import pandas as pd
from sqlalchemy import create_engine
#创建engine
engine= create_engine('mysql+pymysql://用户名:密码@host:port/db_name?charset=utf8')
#数据查询
sql="select * from test_table ;"
data=pd.read_sql(sql_need,engine)
#数据导入