python代码读写数据库

前言:之前都是用pymysql读数据库,操作游标啊啥的,感觉挺不方便的。

下面介绍的读写方法需要先引3个包,pandassqlalchemypymysql ,pip install 引包出现问题的可看我的python基础环境建设篇

1.用pd.read_sql()读取数据

read_sql(sql,con,index_col=‘None’,coerce_float=‘True’,params=‘None’,parse_dates=‘None’,columns=‘None’,chunksize:None=‘None’)

read_sql方法是pandas中用来在数据库中执行指定的SQL语句查询或对指定的整张表进行查询,以DataFrame 的类型返回查询结果.

其中各参数意义如下:

sql:需要执行的sql语句 con:连接数据库所需的engine,用其他数据库连接的包建立,例如SQLalchemy和pymysql
index_col: 选择哪列作为index coerce_float:将数字形字符串转为float
parse_dates:将某列日期型字符串转换为datetime型数据 columns:选择想要保留的列
chunksize:每次输出多少行数据

样例代码:

import pandas as pd
import sqlalchemy

engine = sqlalchemy.create_engine('mysql+pymysql://root:******@192.168.0.***:3306/test')

sql='''
select * from weather_test where
create_time between '2020-09-21' and '2020-09-22'
and city in ('杭州','上海')
'''
df = pd.read_sql(sql,engine)
df

当然啦,引擎用到了pymysql,会调用pymysql的,python库里要有,没有就pip install下。
主要这种读的方式返回的结果是dataframe,方便后续操作数据。

如果sqlalchemy版本是高版本(如2.0.0),我本地python3.9默认装的2.0.16,需要用下面的写法,而python3.6(1.4.49)用上面的写法就行。

from sqlalchemy import create_engine, text
df = pd.read_sql(text(sql), engine.connect())

2.to_sql()批量写

to_sql()是pandas的一个函数,用来向数据库中批量插入数据,其中包含以下参数

DataFrame.to_sql(name,con,flavour = None,schema = None,
if_exists=‘fail’,index = True,index_label = None,chunksize = None,dtype = None)

需要用的参数有:

name:需要操作的表的名称
con:与数据库的连接器
if_exists:如果数据库中已经存在该表,则执行那些操作(1.fail:抛出错误,中断执行 2. replace 替换掉目前的表 3. append:向目前已存在的表中插入数据) 默认为fail
index:是否将DataFrame的索引列作为一列数据插入到数据库的表中.默认为True
index_label:索引列的列标签,默认为None chunksize:每次插入多少行数据,默认为None,一次性批量写入所有数据
dtype :字典格式,key是字段名称,value是字段对应的数据格式.可以在插入数据时指定每个字段的数据格式.默认为None

需要注意的是:

pandas官网说明了to_sql使用的连接器最好是SQLAlchemy建立的连接器
使用to_sql前,需要保证dataframe的列名和要导入的表的列名相等

样例代码:

import sqlalchemy 
import pandas as pd
conn =sqlalchemy.create_engine('mysql+pymysql://****:******@192.168.0.***:3306/test')
dataframe.to_sql('table_name',con=conn,index=False,if_exists='append')

猜你喜欢

转载自blog.csdn.net/keepandkeep/article/details/132259573
今日推荐