最近做一个使用mysql数据库的项目,数据量比较大,读起来费劲,偶然发现pandas中居然有直接读写数据库的内置函数,不禁欣喜万分又颓然失落,喜的是居然有这么方便的方法,落的是pandas用了这么久居然这都不知道......心塞。
回归正题,pandas读取数据库数据的方法如下:
pd.read_sql( sql,con,index_col = None,coerce_float = True,params = None,parse_dates = None,columns = None,chunksize = None )
- sql:string或要执行的SQL查询或表名。SQLAlchemy可选。你可以写个sql语句,也可以写个表名,然后再columns中写入你要读取的列。
- con:SQLAlchemy可连接(引擎/连接)或数据库字符串URI或DBAPI2连接(后备模式),使用SQLAlchemy可以使用该库支持的任何数据库。如果是DBAPI2对象,则仅支持sqlite3。
- index_col:字符串或字符串列表,可选,默认值:None。
- coerce_float:boolean,默认为True,尝试将非字符串,非数字对象(如decimal.Decimal)的值转换为浮点,这对SQL结果集很有用。
- params:list,tuple或dict,optional,default:None,要传递给执行方法的参数列表。
- parse_dates:list或dict,默认值:None,要解析为日期的列名列表。
- columns:list,默认值:None,从SQL表中选择的列名列表(仅在读取表时使用)。
- chunksize:int,默认None,如果指定,则返回一个迭代器,其中chunksize是要包含在每个块中的行数。
pandas写入数据库数据的方法如下:
def df_to_sql(df,table_name,conn,if_exists='append',dtype=None,):
df.to_sql(table_name,conn,if_exists=if_exists,dtype=dtype)
return
- :param df: 要存的数据,dataframe格式
- :param table_name: 要存的表名,如果没有会创建
- :param conn: 数据库连接,同上面读取时的连接一样
- :param if_exists: 如果表存在怎么操作,fail:什么也不做,replace:替换之前的表,append:在之前的表后添加
- :param dtype:字典格式,key是列名,value是这一列的格式(数据库支持的格式比如char,int等),可以不选,pandas会根据数据自动给定字段类型
- :param index:默认是True,产生一个从0开始的索引
- :param index_label:默认为None,想要使用的索引列名称,多重索引应该给定一个序列
使用起来很简单,也很方便,记录一下