1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 从Oracle读取数据并用python处理过程记录(构建BARRA因子遇到的问题)

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

时间:2019-09-28 21:06:04

相关推荐

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

第一次用pycharm运行python语句,第一次从Oracle读数据,出现了无数的bug。。把过程记录一下以提升效率

1.数据读取并处理成dataframe格式:用逐行查询的方式

import cx_Oracleimport pandas as pdimport 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.descriptioncolumnNames = [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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。