• python实现oracle数据库连接并转成dataframe


    数据库

    多表连接 INNER JOIN

    INNER JOIN 连接两个数据表的用法:
    SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号

    INNER JOIN 连接三个数据表的用法:
    SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号

    INNER JOIN 连接四个数据表的用法:
    SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号

    INNER JOIN 连接五个数据表的用法:
    SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON Member.字段号=表5.字段号

    数据分组 group by :

    select 列a from 表明 where 过滤条件 group by 列a
    where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组。

    分组求平均

    oracle与mysql不同,除group by 后面的字段,其他都需要加上函数。

    SELECT distinct pi.COMPCODE,AVG(pi.ROEAVG),AVG(pi.ROTA), AVG(pi.ROA),AVG(pi.ROIC),AVG(pi.ROEANNUAL), AVG(pi.ROAAANNUAL),AVG(pi.SNPMARGINCONMS),AVG(pi.SGPMARGIN),AVG(pi.SCOSTRT), AVG(pi.OPEXPRT),AVG(pi.OPPTOTP), AVG(pic.NETPROFIT),AVG(pic.BIZTOTINCO),AVG(pic.PERPROFIT),AVG(pi.EBITTOTOPI), AVG(pic.BIZTOTCOST),AVG(pic.MANAEXPE),AVG(pic.FINEXPE),AVG(pic.ASSEIMPALOSS), AVG(pi.EBITDA),AVG(pic.BIZINCO),AVG(pi.OPANITOTP),AVG(pi.NVALCHGITOTP),AVG(pi.NNONOPITOTP), AVG(pi.INCOTAXTOTP),AVG(pi.NPCUT), AVG(pic.NETPROFIT),AVG(pi.SCASHREVTOOPIRT),AVG(pi.OPANCFTOOPNI),AVG(pi.OPNCFTOTNCF),AVG(pc.MANANETR),AVG(pic.BIZINCO),AVG(pi.OPANCFTOOPNI),AVG(pi.OPNCFTOTA),AVG(pi.ASSLIABRT), AVG(pi.TDEBTTOTA), AVG(pi.LTMDEBTTOEQU),AVG(pi.EM), AVG(pb.TOTCURRASSET),AVG(pb.TOTALNONCASSETS), AVG(pb.TOTALCURRLIAB),AVG(pb.TOTLIAB),AVG(pb.TOTALNONCLIAB),AVG(pi.CURRENTRT), AVG(pi.QUICKRT),AVG(pi.CONSVATQUICKRT),AVG(pi.MFTOSHTDEBT), AVG(pc.BIZNETCFLOW),AVG(pi.EQURT),AVG(pi.NTANGASSTOTLIAB),AVG(pi.NTANGASSTOTDEBT),AVG(pi.NTANGASSTONDEBT),AVG(pi.EBITDATOTDEBT),AVG(pi.LTMDEBT),AVG(pi.NDEBT),AVG(pi.EBITSCOVER),AVG(pi.LTMDEBTTOWORKCAP),AVG(pi.EBITDATOTDEBT),AVG(pi.EBITDASCOVER),AVG(pi.MFTOSHTDEBT),AVG(pi.OPCYCLE), AVG(pi.INVTURNDAYS),AVG(pi.ACCRECGTURNDAYS), AVG(pi.INVTURNRT),AVG(pi.ACCRECGTURNRT),AVG(pi.CURASSTURNRT),AVG(pi.FATURNRT),AVG(pi.TATURNRT),AVG(pic.BIZTOTINCO),  AVG(pic.PERPROFIT),AVG(pc.NETPROFIT),AVG(pc.INVNETCASHFLOW),AVG(pc.FINNETCFLOW) FROM ((TQ_FIN_PROINDICDATA pi INNER JOIN TQ_FIN_PROBALSHEETNEW pb ON pi.COMPCODE = pb.COMPCODE) INNER JOIN TQ_FIN_PROCFSTATEMENTNEW pc ON pi.COMPCODE =  pc.COMPCODE) INNER JOIN TQ_FIN_PROINCSTATEMENTNEW pic ON  pi.COMPCODE = pic.COMPCODE WHERE  (pi.REPORTYEAR = '2016'  AND pb.REPORTYEAR = '2016'  AND pc.REPORTYEAR = '2016'  AND pic.REPORTYEAR = '2016')  GROUP BY pi.COMPCODE
    
    • 1

    python连接

    连接数据库

    
    import cx_Oracle as cx
    con = cx.connect('数据库名', '密码', '服务地址/表名')
    cursor = con.cursor()       #创建游标
    cursor.execute("SELECT pi.ROEAVG,pi.ROTA,pi.ROA,pi.ROIC,pi.ROEANNUAL,pi.ROAAANNUAL,pi.SNPMARGINCONMS,pi.SGPMARGIN,pi.SCOSTRT,pi.OPEXPRT,pi.OPPTOTP,pic.NETPROFIT,pic.BIZTOTINCO,pic.PERPROFIT,pi.EBITTOTOPI,pic.BIZTOTCOST,pic.MANAEXPE,pic.FINEXPE,pic.ASSEIMPALOSS,pi.EBITDA,pic.BIZINCO,pi.OPANITOTP,pi.NNONOPITOTP,pi.INCOTAXTOTP,pi.NVALCHGITOTP,pi.NPCUT,pic.NETPROFIT,pi.SCASHREVTOOPIRT,pi.OPANCFTOOPNI,pi.OPNCFTOTNCF,pc.MANANETR,pic.BIZINCO,pi.OPANCFTOOPNI,pi.OPNCFTOTA,pi.ASSLIABRT,pi.TDEBTTOTA,pi.LTMDEBTTOEQU,pi.EM,pb.TOTCURRASSET,pb.TOTALNONCASSETS,pb.TOTALCURRLIAB,pb.TOTLIAB,pb.TOTALNONCLIAB,pi.CURRENTRT,pi.QUICKRT,pi.CONSVATQUICKRT,pi.MFTOSHTDEBT,pc.BIZNETCFLOW,pi.EQURT,pi.NTANGASSTOTLIAB,pi.NTANGASSTOTDEBT,pi.NTANGASSTONDEBT,pi.EBITDATOTDEBT,pi.LTMDEBT,pi.NDEBT,pi.EBITSCOVER,pi.LTMDEBTTOWORKCAP,pi.EBITDATOTDEBT,pi.EBITDASCOVER,pi.MFTOSHTDEBT,pi.OPCYCLE,pi.INVTURNDAYS,pi.ACCRECGTURNDAYS,pi.INVTURNRT,pi.ACCRECGTURNRT,pi.CURASSTURNRT,pi.FATURNRT,pi.TATURNRT,pic.BIZTOTINCO,pic.PERPROFIT,pc.NETPROFIT,pc.INVNETCASHFLOW,pc.FINNETCFLOW FROM TQ_FIN_PROINDICDATA pi,TQ_FIN_PROBALSHEETNEW pb,TQ_FIN_PROCFSTATEMENTNEW pc,TQ_FIN_PROINCSTATEMENTNEW pic WHERE pi.COMPCODE = pb.COMPCODE AND  pb.COMPCODE =  pc.COMPCODE AND  pc.COMPCODE = pic.COMPCODE AND  pi.REPORTYEAR = '2016'  AND pb.REPORTYEAR = '2016'  AND pc.REPORTYEAR = '2016' AND pic.REPORTYEAR = '2016' ")
    data = cursor.fetchone()        #获取一条数据
    print(data)     #打印数据
    cursor.close()  #关闭游标
    con.close()     #关闭数据库连接
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    转化成dataframe

    fetchone() : 返回单个的元组,也就是一条记录(row),如果没有结果 , 则返回 None
    fetchall() : 返回多个元组,即返回多条记录(rows),如果没有结果,则返回 ()
    fetchall()报内存不够的错误时,用fetchone()循环获取。

    
    import cx_Oracle as cx
    con = cx.connect('数据库名', '密码', '服务地址/表名') 
    cursor = con.cursor()  # 创建游标
    cursor.execute(
            "SELECT distinct pi.COMPCODE,AVG(pi.ROEAVG),AVG(pi.ROTA), AVG(pi.ROA),AVG(pi.ROIC),AVG(pi.ROEANNUAL), AVG(pi.ROAANNUAL),AVG(pi.ROAAANNUAL),AVG(pi.SNPMARGINCONMS),AVG(pi.SGPMARGIN),AVG(pi.SCOSTRT), AVG(pi.OPEXPRT),AVG(pi.OPPTOTP), AVG(pic.NETPROFIT),AVG(pic.BIZTOTINCO),AVG(pic.PERPROFIT),AVG(pi.EBITTOTOPI), AVG(pic.BIZTOTCOST),AVG(pic.MANAEXPE),AVG(pic.FINEXPE),AVG(pic.ASSEIMPALOSS), AVG(pi.EBITDA),AVG(pic.BIZINCO),AVG(pi.OPANITOTP),AVG(pi.NVALCHGITOTP),AVG(pi.NNONOPITOTP), AVG(pi.INCOTAXTOTP),AVG(pi.NPCUT), AVG(pic.NETPROFIT),AVG(pi.SCASHREVTOOPIRT),AVG(pi.OPANCFTOOPNI),AVG(pi.OPNCFTOTNCF),AVG(pc.MANANETR),AVG(pic.BIZINCO),AVG(pi.OPANCFTOOPNI),AVG(pi.OPNCFTOTA),AVG(pi.ASSLIABRT), AVG(pi.TDEBTTOTA), AVG(pi.LTMDEBTTOEQU),AVG(pi.EM), AVG(pb.TOTCURRASSET),AVG(pb.TOTALNONCASSETS), AVG(pb.TOTALCURRLIAB),AVG(pb.TOTLIAB),AVG(pb.TOTALNONCLIAB),AVG(pi.CURRENTRT), AVG(pi.QUICKRT),AVG(pi.CONSVATQUICKRT),AVG(pi.MFTOSHTDEBT), AVG(pc.BIZNETCFLOW),AVG(pi.EQURT),AVG(pi.NTANGASSTOTLIAB),AVG(pi.NTANGASSTOTDEBT),AVG(pi.NTANGASSTONDEBT),AVG(pi.EBITDATOTDEBT),AVG(pi.LTMDEBT),AVG(pi.NDEBT),AVG(pi.EBITSCOVER),AVG(pi.LTMDEBTTOWORKCAP),AVG(pi.EBITDATOTDEBT),AVG(pi.EBITDASCOVER),AVG(pi.MFTOSHTDEBT),AVG(pi.OPCYCLE), AVG(pi.INVTURNDAYS),AVG(pi.ACCRECGTURNDAYS), AVG(pi.INVTURNRT),AVG(pi.ACCRECGTURNRT),AVG(pi.CURASSTURNRT),AVG(pi.FATURNRT),AVG(pi.TATURNRT),AVG(pic.BIZTOTINCO),  AVG(pic.PERPROFIT),AVG(pc.NETPROFIT),AVG(pc.INVNETCASHFLOW),AVG(pc.FINNETCFLOW) FROM ((TQ_FIN_PROINDICDATA pi INNER JOIN TQ_FIN_PROBALSHEETNEW pb ON pi.COMPCODE = pb.COMPCODE) INNER JOIN TQ_FIN_PROCFSTATEMENTNEW pc ON pi.COMPCODE =  pc.COMPCODE) INNER JOIN TQ_FIN_PROINCSTATEMENTNEW pic ON  pi.COMPCODE = pic.COMPCODE WHERE  (pi.REPORTYEAR = '2016'  AND pb.REPORTYEAR = '2016'  AND pc.REPORTYEAR = '2016'  AND pic.REPORTYEAR = '2016')  GROUP BY pi.COMPCODE")
    df = pd.DataFrame()
    row = cursor.fetchone()
    # print(len(row))#75
    while row:
        # print(row)
        # df = df.append(pd.DataFrame({'COMPCODE': row[0],'POEAVG': row[1],'ROTA': row[2],'ROA': row[3],'ROIC': row[4],'ROEANNUAL': row[5],'ROAAANNUAL': row[6],'SNPMARGINCONMS': row[7],'SGPMARGIN': row[8],'SCOSTRT': row[9],'OPEXPRT': row[10],'OPPTOTP': row[11],'NETPROFIT': row[12],'BIZTOTINCO': row[13],'PERPROFIT':row[14],'EBITTOTOPI':row[15],'BIZTOTCOST':row[16],'MANAEXPE':row[17],'FINEXPE':row[18],'ASSEIMPALOSS':row[19],'EBITDA':row[20],'BIZINCO':row[21],'OPANITOTP':row[22],'NVALCHGITOTP':row[23],'NNONOPITOTP':row[24],'INCOTAXTOTP':row[25],'NPCUT':row[26],'NETPROFIT':row[27],'SCASHREVTOOPIRT':row[28],'OPANCFTOOPNI':row[29],'OPNCFTOTNCF':row[30],'MANANETR':row[31],'BIZINCO':row[32],'OPANCFTOOPNI':row[33],'OPNCFTOTA':row[34],'ASSLIABRT':row[35],'TDEBTTOTA':row[36],'LTMDEBTTOEQU':row[37],'EM':row[38],'TOTCURRASSET':row[39],'TOTALNONCASSETS':row[40],'TOTALCURRLIAB':row[41],'TOTLIAB':row[42],'TOTALNONCLIAB':row[43],'CURRENTRT':row[44],'QUICKRT':row[45],'CONSVATQUICKRT':row[46],'MFTOSHTDEBT':row[47],'BIZNETCFLOW':row[48],'EQURT':row[49],'NTANGASSTOTLIAB':row[50],'NTANGASSTOTDEBT':row[51],'NTANGASSTONDEBT':row[52],'EBITDATOTDEBT':row[53],'LTMDEBT':row[54],'NDEBT':row[55],'EBITSCOVER':row[56],'LTMDEBTTOWORKCAP':row[57],'EBITDATOTDEBT':row[58],'EBITDASCOVER':row[59],'MFTOSHTDEBT':row[60],'OPCYCLE':row[61],'INVTURNDAYS':row[62],'ACCRECGTURNDAYS':row[63],'INVTURNRT':row[64],'ACCRECGTURNRT':row[65],'CURASSTURNRT':row[66],'FATURNRT':row[67],'TATURNRT':row[68],'BIZTOTINCO':row[69],'PERPROFIT':row[70],'NETPROFIT':row[71],'INVNETCASHFLOW':row[72],'FINNETCFLOW':row[73]}, index=[0]))
        df = df.append(pd.DataFrame(
                {'COMPCODE': [row[0]], 'ROEAVG': [row[1]], 'ROTA': [row[2]], 'ROA': [row[3]], 'ROIC': [row[4]],
                 'ROEANNUAL': [row[5]],'ROAANNUAL':[row[6]] ,'ROAAANNUAL': [row[7]], 'SNPMARGINCONMS': [row[8]], 'SGPMARGIN': [row[9]],
                 'SCOSTRT': [row[10]], 'OPEXPRT': [row[11]], 'OPPTOTP': [row[12]], 'NETPROFIT': [row[13]],
                 'BIZTOTINCO': [row[14]], 'PERPROFIT': [row[15]], 'EBITTOTOPI': [row[16]], 'BIZTOTCOST': [row[17]],
                 'MANAEXPE': [row[18]], 'FINEXPE': [row[19]], 'ASSEIMPALOSS': [row[20]], 'EBITDA': [row[21]],
                 'BIZINCO': [row[22]], 'OPANITOTP': [row[23]], 'NVALCHGITOTP': [row[24]], 'NNONOPITOTP': [row[25]],
                 'INCOTAXTOTP': [row[26]], 'NPCUT': [row[27]], 'NETPROFIT': [row[28]], 'SCASHREVTOOPIRT': [row[29]],
                 'OPANCFTOOPNI': [row[30]], 'OPNCFTOTNCF': [row[31]], 'MANANETR': [row[32]], 'BIZINCO': [row[33]],
                 'OPANCFTOOPNI': [row[34]], 'OPNCFTOTA': [row[35]], 'ASSLIABRT': [row[36]], 'TDEBTTOTA': [row[37]],
                 'LTMDEBTTOEQU': [row[38]], 'EM': [row[39]], 'TOTCURRASSET': [row[40]], 'TOTALNONCASSETS': [row[41]],
                 'TOTALCURRLIAB': [row[42]], 'TOTLIAB': [row[43]], 'TOTALNONCLIAB': [row[44]], 'CURRENTRT': [row[45]],
                 'QUICKRT': [row[46]], 'CONSVATQUICKRT': [row[47]], 'MFTOSHTDEBT': [row[48]], 'BIZNETCFLOW': [row[49]],
                 'EQURT': [row[50]], 'NTANGASSTOTLIAB': [row[51]], 'NTANGASSTOTDEBT': [row[52]],
                 'NTANGASSTONDEBT': [row[53]], 'EBITDATOTDEBT': [row[54]], 'LTMDEBT': [row[55]], 'NDEBT': [row[56]],
                 'EBITSCOVER': [row[57]], 'LTMDEBTTOWORKCAP': [row[58]], 'EBITDATOTDEBT': [row[59]],
                 'EBITDASCOVER': [row[60]], 'MFTOSHTDEBT': [row[61]], 'OPCYCLE': [row[62]], 'INVTURNDAYS': [row[63]],
                 'ACCRECGTURNDAYS': [row[64]], 'INVTURNRT': [row[65]], 'ACCRECGTURNRT': [row[66]],
                 'CURASSTURNRT': [row[67]], 'FATURNRT': [row[68]], 'TATURNRT': [row[69]], 'BIZTOTINCO': [row[70]],
                 'PERPROFIT': [row[71]], 'NETPROFIT': [row[72]], 'INVNETCASHFLOW': [row[73]], 'FINNETCFLOW': [row[74]]}))
        row = cursor.fetchone()
    # print(df)     #打印数据
    cursor.close()  # 关闭游标
    print('数据连接成功')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    技术干货|MindSpore贝叶斯应用工具箱详细讲解
    FineBI 将聚合之后的结果,再求平均值
    ARM64汇编06 - 基本整型运算指令
    chrome 开启HEVC硬件解码
    让pandas速度提升10倍从apply到parallel_apply
    conda安装的使用
    【spring源码解析】循环依赖的实现原理
    【设计模式】27.结构型模式-适配器(Adapter)
    一文秒懂!腾讯云ES HTTPS 集群访问通信最佳实践
    因 Log4j 漏洞,ONUS 被黑客攻击后拒交赎金;OpenHarmony 3.0 实现全设备能力初步覆盖;压缩软件 7-Zip 新版发布 | 开源日报
  • 原文地址:https://blog.csdn.net/qq_47326711/article/details/126265903