从Oracle读取数据并用python处理过程记录(构建BARRA因子遇到的问题)

第一次用pycharm运行python语句,第一次从Oracle读数据,出现了无数的bug。。把过程记录一下以提升效率
1.数据读取并处理成dataframe格式:用逐行查询的方式

import cx_Oracle
import pandas as pd
import numpy as np
#连接数据库
db = cx_Oracle.connect('用户名','密码','位置'# 获取游标
cr= db.cursor()
#查询数据并形成数据表
def get_df_from_sqldata(sql): #sql放sql语句
	cr = db.cursor()
	cr.execute(sql)
	rs = cr.fetchall()
	columnDes = cr.description
	columnNames = [colunmDes[i][0] for i in range(len(columnDes))]
	df = pd.DataFrame([list(i) for i in rs], columns = columnNames)
	return df

2.SQL语句在Oracle中运行无误,但在python中报错“未找到要求的from关键字”,主要是一些小问题,比如多了逗号, 没加空格之类
我的问题在于where条件前面没有加上空格
网上还有一些问题,eg 查询的字段另起的中文名字中出现了各种不符合规则的字符,比如:/ 、\ - :这些字符,除此之外,中文名字过长,也会出现这种问题。

3.“ORA-00942: 表或视图不存在”,
原因一是自己起的表命没有全部大写。Oracle是大小写敏感的,在python中名字是小写的,执行代码Oracle就找不到了。。
原因二是调用的主表名不对。用以下语句查找表所属数据库:
select * from all_tables t where t.TABLE_NAME = upper(‘已知指标所在的表名’)

4.oracle not supported error: python处理的数据类型与Oracle中数据类型需要一一对应,不然没法写进Oracle。
参考:python与oracle(三)数据类型
这里需要用到显示DataFrame数据类型的代码

print(df.dtypes)

int32没法写进number类型列,需要在写入Oracle的语句前加int()

5.模糊查询与表拼接

select t.指标一, c.* from smdbgdata.CD_Macroindicator c,smdbgdata.C_ED_macroIndicatorData c where t.indicatorname like ‘%美国国债%’ and t.indicatorcode = c.indicatorcode and c.enddate >sysdate-10

6.建同义词与授权:有时候要跨库查询
Create public synonym 表名 for 库1.表名;
grant DELETE,INSERT,SELECT,UPDATE on 库1.表名 to 库2;

7.选取部分字段
substr(A.s_info_windcode,1,instr(a.s_info_windcode,’.’,1,1)-1)
8.更改日期格式
to_char(to_date(c.time,‘YYYY-MM-DD’),‘YYYYMMDD’) = A.TRADE_DT

9.groupby有问题:有股票被放进符合要求(非st pt股,上市时间>180天,A股)的股票列表,但在查询的时间区间内数据非整型,只有某几天有数据。
目前的解决方法是把出问题的天拿出来按股票代码循环,找出有问题的代码,在查询数据时删掉

10.跑循环有时候不知道跑到第几个,需要从Oracle里读最新日期看一下。

select *
from FOF_STOCK_ETOP T order by T.TIME DESC
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值