python操作DB2数据库,并存储为DataFrame格式

Python操作db2有几种方式:

  1. ibm_db
    A)无参数读取、插入、更新
    这里写图片描述
    fetch_both只能读取一行,无读取所有行的函数,若要获取所有行数据,需要做循环:
    这里写图片描述
    插入、更新类似。
    B) 有参数读取、插入、更新
    这里写图片描述
    然后再执行:ibm_db.execute(out_stmt)
    读取、更新类似
    C) 批量插入数据库
    从上面可见,插入只能循环一条一条的插入,或者生成csv文件后再导入数据库,速度慢,不灵活。不支持dataframe整体插入数据库中。

  2. sqlalchemy和ibm_db_sa
    网上大多是mysql的使用方式,对db2基本无资料,只能自己翻了个mysql的源码,发现sqlalchemy也能支持db2,但是需要对包里的几个文件进行修改:
    A) 安装好的ibm_db_sa,进行调用时,经常报错:NoSuchModuleError: Can’t load plugin: sqlalchemy.dialects:ibm_db_sa
    这里写图片描述
    解决方法:
    第一步:这是因为安装的ibm_db_sa默认安装在site-packages的目录下,但是sqlalchemy里面并没有,需要将ibm_db_sa的整个目录拷贝到site-packages\sqlalchemy\dialects下面
    第二步:修改site-packages\sqlalchemy\dialects下面的_init_.py,如下:
    这里写图片描述
    第三步:修改site-packages\sqlalchemy\databases下面的_init_.py,如下:
    这里写图片描述
    B) 以上完成后,就能使用sqlalchemy和ibm_db_sa处理db2了
    这里写图片描述
    i) 利用sqlalchemy本身进行查询、插入、更新
    这里写图片描述
    获取到的数据是RowProxy类型,无法直接处理,则可以使用下面的方法:
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    Key和value分别做了dataframe的两列数据,后续可以转置再处理

ii) 利用dataframe进行查询、插入、更新
通过sql读取数据,存储为DataFrame格式

pandas.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None,chunksize=None)

read_sql_query()中可以接受SQL语句,包括增删改查。但是DELETE语句不会返回值(但是会在数据库中执行),UPDATE,SELECT,等会返回结果

例如:

data = pd.read_sql_query('select * from t_line ',con = engine)

会返回一个数据库t_line表的DataFrame格式。如有时间列可以parse_dates = [time_column]用于解析时间,并把此列作为索引index_col = [time_column]


整张表读取于DataFrame格式

pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, parse_dates=None, columns=None, chunksize=None)

例如:

data = pd.read_sql_table(table_name = 't_line',con = engine,parse_dates = 'time',index_col = 'time',columns = ['a','b','c'])

读取数据库

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)

DataFrame写入数据库

df.to_sql(name = u'tosqltest',con = engine, schema=u'M2_DV',if_exists = 'append',index = False,index_label = False,chunksize = 1000)

schema:用于指定主题;
chunksize:如果data的数据量太大,数据库无法响应可能会报错,这时候就可以设置chunksize,比如chunksize = 1000,data就会一次1000的循环写入数据库。

若报错:“SAWarning: Unicode type received non-unicode bind param value”,则需要在name\schema值的前面加上 ’u’

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值