使用 Python 2.7 从 Oracle Database 12c 导出数据

Export data from Oracle Database 12c using Python 2.7

我正在尝试将包含在 Oracle 12c 数据库中的 table 导出为 csv 格式 - 使用 Python 2.7。我写的代码如下所示:

import os
import cx_Oracle
import csv

SQL = 'SELECT * FROM ORACLE_TABLE'
filename = 'C:\Temp\Python\Output.csv'
file = open(filename, 'w')
output = csv.writer(file, dialect='excel')

connection = cx_Oracle.connect('username/password@connection_name')

cursor = connection.cursor()
cursor.execute(SQL)

for i in cursor:
    output.writerow(i)

cursor.close()
connection.close()
file.close()

此代码在我定义 'connection':

的行中产生错误

ORA-12557: TNS:protocol 适配器不可加载

我该如何补救?任何帮助将不胜感激。

请注意:我已经遇到过 Whosebug 对与此非常相似的问题的回应。但是,他们经常建议更改环境变量中的路径 - 我不能这样做,因为我没有适当的管理权限。再次感谢您的帮助。

ORA-12557 是由 Windows 上的 %ORACLE_HOME% 问题引起的。通常的建议是更改 PATH 设置。

"I cannot do this since I don't have appropriate administer privileges."

在这种情况下,您没有太多选择。也许您可以导航到 ORACLE_HOME 目录并从那里 运行 您的脚本。否则看看您还有哪些其他可用的工具:Oracle SQL Developer?蟾蜍? SQL*加上?

我们发现通过导航到配置 -> Oracle 并编辑文件 'tnsnames.ora' 可以解决问题。 tnsnames 文件显示如下:

connection_name =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS= ... )
     )
     (CONNECT_DATA =
        (SERVICE_NAME= ...)
     )
)

通过将 connection_name 的第一个实例更改为 connection_name.WORLD,然后键入

set ORACLE_HOME=

在执行Python脚本之前进入命令行,上面的脚本现在运行没有错误。

我使用 ini 文件来存储数据库连接参数。希望对你有帮助。

self.mydsn = cx_Oracle.makedsn(self.parser.get('oracle', 'db'),self.parser.get('oracle', 'port'),self.parser.get('oracle', 'service_name'))
        try:
            self.connpool = cx_Oracle.SessionPool(user=self.parser.get('oracle', 'username'),password=self.parser.get('oracle', 'userpass'),dsn=self.mydsn,min=1,max=5,increment=1)
        except Exception as e:
            print e

您可以使用此 python 脚本进行 oracle csv 导出:

https://github.com/teopost/csv_exp