pandas读写oracle数据库
1.包准备
需要用到sqlalchemy,主要是配合pandas读取
需要用到cx_Oracle,主要是做oracle连接的驱动
2.连接方式
1 import cx_Oracle 2 from sqlalchemy import create_engine 3 import json 4 import pandas as pd 5 import os 6 import sqlalchemy 7 8 #创建连接 9 def create_oracle_connect(self,host,user_name,password,port,database): 10 connect_info='oracle+cx_oracle://%s:%s@%s:%s/%s' %(user_name,password,host,port,database) 11 oracle_engine=create_engine(connect_info,encoding='utf-8') 12 return oracle_engine
3.读取数据
1 data=pd.read_sql_query(sql,self.engine)
读取出来以后是dataframe的格式,字段名都是小写
4.插入、写入数据
1 df.to_sql(table_name, self.engine, index=False, if_exists='append', dtype=type_list)
需要把要插入的数据整理成df
然后oracle的数据类型和pandas数据类型是不统一的,除了sting类型,其他都需要转一下,靠
dtype这个参数,传入一个字段对应类型的字典,类似:
1 {'act_no':sqlalchemy.Integer(),'created_time':sqlalchemy.DateTime()}
具体有哪些类型,可以看看sqlalchemy的文档
如果字段允许为空,想传入空字段,可以传一个Python里的None
5.注意事项
oracle sql里字符串都要加引号,如果是Python外部变量传入字符串,%s也要引号起来。
oracle sql里对应更改数据类型的函数,如to_date,在进行比较或者等操作的时候,sql里需要保证左右的变量类型一致
sql最好用三引号引起来,最好不要换行
6.批量update数据,待整理