如何使用Python实现从SQL型数据库读写dataframe型数据的方法

  介绍

这篇文章主要介绍如何使用Python实现从SQL型数据库读写dataframe型数据的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Python的熊猫包对表格化的数据处理能力很强,而SQL数据库的数据就是以表格的形式储存,因此经常将SQL数据库里的数据直接读取为dataframe,分析操作以后再将dataframe存到SQL数据库中,而熊猫中的read_sql和to_sql函数就可以很方便得从SQL数据库中读写数据。

<强> read_sql

参见熊猫。read_sql的文档,read_sql主要有如下几个参数:

<李>

sql: sql命令字符串

<李>

反对:连接sql数据库的引擎,一般可以用SQLalchemy或者pymysql之类的包建立

<李>

index_col:选择某一列作为指数

<李>

coerce_float:非常有用,将数字形式的字符串直接以浮动型读入

<李>

parse_dates:将某一列日期型字符串转换为datetime型数据,与pd。to_datetime函数功能类似。可以直接提供需要转换的列名以默认的日期形式转换,也可以用字典的格式提供列名和转换的日期格式,比如{column_name:格式字符串}(格式字符串:“Y %: % m: % H: % m: % S")。

<李>

列:要选取的列,一般没啥用,因为在sql命令里面一般就指定要选择的列了

<李>

chunksize:如果提供了一个整数值,那么就会返回一个发电机,每次输出的行数就是提供的值的大小。

<李>

参数:其他的一些执行参数,没用过不太清楚…

以链接常见的mysql数据库为例:

import  pandas  as  pd   import  pymysql   import  sqlalchemy   得到sqlalchemy  import  create_engine   #,1只,用sqlalchemy构建数据库链接引擎   时间=connect_info  & # 39; mysql + pymysql://{}: {} @ {}: {}/{} ? charset=use utf8 # 39; .format (DB_USER, DB_PASS, DB_HOST,, DB_PORT,,数据库),# 1   时间=engine  create_engine (connect_info)   #,sql 命令   时间=sql_cmd “SELECT  *,得到table"   时间=df  pd.read_sql (sql=sql_cmd,反对=引擎)   #,2只用DBAPI构建数据库链接引擎   con =, pymysql.connect(主机=localhost,用户=用户名,密码=密码,数据库=dbname, charset=& # 39; use utf8 # 39;,, use_unicode=True)   df =, pd.read_sql (sql_cmd, con)

<强>解释一下 # 1:这个是sqlalchemy中链接数据库的URL格式:方言[+司机]://user: password@host/dbname[?键=值. .].dialect代表书库局类型,比如mysql,甲骨文,postgresql.driver代表DBAPI的名字,比如psycopg2, pymysql等。具体说明可以参考这里。此外由于数据里面有中文的时候就需要将字符集设为utf8。

<强> to_sql

参见熊猫。to_sql函数,主要有以下几个参数:

<李>

名称:输出的表名

<李>

反对:与read_sql中相同

<李>

if_exits:三个模式:失败,若表存在,则不输出,取代:若表存在,覆盖原来表里的数据,附加:若表存在,将数据写到原表的后面。默认为失败

<李>

指数:是否将df的指数单独写到一列中

<李>

index_label:指定列作为df的指数输出,此时指数为真正的

<李>

chunksize:同read_sql

<李>

dtype:指定列的输出到数据库中的数据类型。字典形式储存:{column_name: sql_dtype}。常见的数据类型有<代码> sqlalchemy.types.INTEGER() ,<代码> sqlalchemy.types.NVARCHAR() ,<代码> sqlalchemy.Datetime() 等,具体数据类型可以参考这里

还是以写到mysql数据库为例:

df.to_sql (name=& # 39;表# 39;,,   ,,反对=反对,,   ,,if_exists=& # 39;添加# 39;,,   ,,指数=False,   ,,dtype={& # 39; col1 # 39;: sqlalchemy.types.INTEGER (),   ,,,,& # 39;col2 # 39;: sqlalchemy.types.NVARCHAR(长度=255),   ,,,,& # 39;col_time& # 39;: sqlalchemy.DateTime (),   ,,,,& # 39;col_bool& # 39;: sqlalchemy.types.Boolean   ,,})

<强>注:强如果不提供dtype, to_sql会自动根据df列的dtype选择默认的数据类型输出,比如字符型会以<代码> sqlalchemy.types.TEXT> 如何使用Python实现从SQL型数据库读写dataframe型数据的方法