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

使用Python 2.7从Oracle数据库12c导出数据,python,sql,oracle,python-2.7,export-to-csv,Python,Sql,Oracle,Python 2.7,Export To Csv,我正在尝试使用Python 2.7将Oracle 12c数据库中包含的表导出为csv格式。我编写的代码如下所示: 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') connectio

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

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()
此代码在我定义“连接”的行中产生错误:

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

我该怎么补救呢?任何帮助都将不胜感激


请注意:我已经遇到了与此问题非常类似的StackOverflow响应。但是,他们经常建议更改环境变量内的路径-我无法这样做,因为我没有适当的管理权限。再次感谢您的帮助。

ORA-12557是由于Windows上的
%ORACLE\u HOME%
出现问题造成的。通常的建议是更改
路径
设置

“我无法执行此操作,因为我没有适当的管理员权限。”


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

ORA-12557是由Windows上的
%ORACLE\u HOME%
问题引起的。通常的建议是更改
路径
设置

“我无法执行此操作,因为我没有适当的管理员权限。”


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

我们发现,通过导航到config->Oracle并编辑文件“tnsnames.ora”,可以解决这个问题。tnsnames文件显示如下:

connection_name =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS= ... )
     )
     (CONNECT_DATA =
        (SERVICE_NAME= ...)
     )
)
通过将
connection\u name
的第一个实例更改为
connection\u name.WORLD
,然后键入

set ORACLE_HOME=

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

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

connection_name =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS= ... )
     )
     (CONNECT_DATA =
        (SERVICE_NAME= ...)
     )
)
通过将
connection\u name
的第一个实例更改为
connection\u name.WORLD
,然后键入

set ORACLE_HOME=

在执行Python脚本之前,将其插入命令行中,上面的脚本现在运行时不会出错。

我使用ini文件存储DB连接参数。希望能有帮助

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

我使用ini文件来存储DB连接参数。希望能有帮助

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导出:


您可以将此python脚本用于oracle csv导出:


如果您可以使用计算机上的其他应用程序连接到实例,那么您很有可能在不需要任何其他人的情况下修复此问题。但是在任何情况下,我怀疑现场的人员都能更好地帮助您。如果您可以使用计算机上的其他应用程序连接到实例,那么您很有可能在不需要任何其他人的情况下修复此问题。但是在任何情况下,我怀疑现场的人员都能更好地帮助您。是否可以在python脚本中指定Oracle主目录的位置并以这种方式执行?是否可以在python脚本中指定Oracle主目录的位置并以这种方式执行?