首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pandas&sqlalchemy

python 操作oracle可以采用cx_Oracle库,更方便的,如果数据是在pandas dataframe中,则可以换一种方式,结合 sqlalchemy库,实现更高效的存储方式。

pandas dataframe 的结果更好的存入oracle。可以使用 to_sql。

df.to_sql(name='table_name',con='sqlalchemy_engine',if_exists='append',index=False)

sqlalchemy_engine ?

from sqlalchemy import create_engine

engine = create_engine(connect_str , echo=True, encoding='utf8',convert_unicode=True)

connect_str ?

通常来说:比如oracle

oracle://username:password@host:port/database_name?charset=utf8

但是会报 sid 找不到的错误。用以下方式解决:

dsnStr = cx_Oracle.makedsn(host,port,servicename)

dsnStr = dsnStr.replace("SID","SERVIEC_NAME")

connect_str = "oracle://username:password@"+ dsnStr

有可能会遇到编码问题,比如数据库 nls_characterset 是 zhs16gbk

需要设置:

import os

os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'

非常方便!

如果需要将数据直接读入df:

eng_con =engine.connect()

outpx = eng_con.execute(sql_str)

df = pd.DataFrame(outpx.fetchall())

df.columns = outpx.keys()

从hive读取数据?

from pyhive import hive

conn = hive.Connection(host=,port=,username=,database=)

cursor = conn.cursor()

cursor.execute()

pd.DataFrame(cursor.fetchall())

cursor.close()

conn.close()

一般场景从hive读取数据,经过分析处理后存入oracle,方便前台取用。直接用pandas相关的read_sql to_sql读取数据和存入数据,借助sqlalchemy库非常方便。

主要面临的问题通常是编码问题,因为hive、环境、oracle三方可能存在不一致的问题。需要特别注意。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181009G1GX5F00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券