【问题标题】:Python connection to Oracle DB and then HOW TO export data as csvPython 连接到 Oracle DB,然后如何将数据导出为 csv
【发布时间】:2023-01-10 10:13:11
【问题描述】:

我是一名学生,试图将我最近在学校的 Python 入门课程中学到的知识传授到工作场所。我正在尝试连接到 Oracle 数据库(我只有读取权限),然后找到一些特定数据,然后将其导出到 csv 文件。看起来很简单,但我在课堂上学到的东西在现实世界中并不适用。我不仅要答案,还要有耐心的人解释为什么以及如何学习。先感谢您:

这是我现在所拥有的,它不会产生任何错误:

import cx_Oracle

connection = cx_Oracle.connect('Username/Password//Hostname:Port/ServiceName')

cursor = connection.cursor()

cursor.execute("SELECT UT_ER.AM_CRI.GROUP, UT_ER.AM_CRI.CTYPE, UT_ER.AM_CRI.RID, UT_ER.AM_CRI.PROB, UT_ER.AM_CRI.STAT, UT_ER.AM_CRI.STATDESCR, UT_ER.AM_CRI.ACCTNUM, UT_ER.AM_CRI.CONNAME, UT_ER.AM_CRI.PHO, UT_ER.AM_CRI.STRADD, UT_ER.AM_CRI.CY, UT_ER.AM_CRI.SECLOC, UT_ER.AM_CRI.DATECR, UT_ER.AM_CRI.ASSNAM, UT_ER.AM_CRI.DATEMOD, UT_ER.AM_CRI.RESTIER1, UT_ER.AM_CRI.RESTIER2, UT_ER.AM_CRI.RES, UT_ER.AM_CRI.FIXQ, UT_ER.AM_CRI.CRDBY FROM UT_ER.AM_CRI WHERE UT_ER.AM_CRI.SITEID = '311' AND UT_ER.AM_CRI.CATEG = 'Operations' AND UT_ER.AM_CRI.TYP = 'Vendor' AND UT_ER.AM_CRI.ITM = 'Bury Fiber' AND UT_ER.AM_CRI.STAT <> '1401' AND UT_ER.AM_CRI.STAT <> '1501' AND UT_ER.AM_CRI.STAT <> '1601' AND (UT_ER.AM_CRI.GROUP = 'SE - SAN - OPERATIONS FIBER REQUEST' OR UT_ER.AM_CRI.GROUP = 'SE - SAN - OPERATIONS FIBER BURY' OR UT_ER.AM_CRI.GROUP = 'VND - TANTRIC - OPERATIONS FIBER BURY')")

现在我需要帮助的地方是导出到 csv 文件。在课堂上我能够做到这一点,但它是一个简单的数据库,只有一个表和几行,从那时起我就失去了我用来做这项工作的东西。我试过谷歌,它把我带到了一个我认为很接近this stack overflow post的帖子,但我只是不明白那里发生了什么。谢谢你。

【问题讨论】:

    标签: python import-csv


    【解决方案1】:

    这是一种方法。它使用最新版本的 cx_Oracle which is now called python-oracledb。或者您可以使用您链接到的问题中给出的答案。尝试其中一种解决方案,然后使用您尝试过的代码更新您的问题,并解释您仍然遇到的问题。

    import os
    import csv
    import oracledb
    
    un = os.environ.get("PYTHON_USERNAME")
    pw = os.environ.get("PYTHON_PASSWORD")
    cs = os.environ.get("PYTHON_CONNECTSTRING")
    
    connection = oracledb.connect(user=un, password=pw, dsn=cs)
    
    with connection.cursor() as cursor:
        cursor.arraysize = 1000  # tune this for large queries
        f = open("emp.csv", "w")
        writer = csv.writer(f, lineterminator="
    ", quoting=csv.QUOTE_NONNUMERIC)
        cursor.execute("""select * from emp""")
        col_names = [row[0] for row in cursor.description]
        writer.writerow(col_names)
        while True:
            rows = cursor.fetchmany()  # extra call at end won't incur extra round-trip
            if not rows:
                break
            writer.writerows(rows)
        f.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2019-03-27
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 2021-11-21
      • 2020-04-08
      • 2013-05-07
      相关资源
      最近更新 更多