在Windows中部署cx_Oracle

时间:2013-12-09 13:40:04

标签: python windows oracle11g cx-oracle

我正在尝试在python中使用cx_Oracle模块来访问远程数据库并在表中插入或删除行。 BTW我已经下载了oracle即时客户端11.1以及odbc和sqlplus版本。我已将环境变量ORACLE_HOMETNS_ADMIN设置到目录我已解压缩的文件,并将此目录添加到PATH变量。当我用Google搜索时,我认为应该有一些.ora文件,但我找不到它们。

我可以从命令行使用sqlplus命令,但我的主要问题是我无法安装和使用cx_Oracle。我不想使用任何命令行脚本;我只想使用cx_Oracle作为API。

任何人都可以给我一个完整的解释,我真的被困在那里了。该领域的所有文件都含糊不清。最诚挚的问候。

编辑1:

我使用cx_Oraclepython setup.py install命令尝试了python setup.py build --compiler=mingw32的源包。我没有再次收到oracle错误,但是我收到command 'gcc' failed错误。我尝试了MinGW编译器并编辑了环境变量PATH以包含MinGW安装目录(例如C:\MinGW);我还安装了Microsoft Visual C ++(版本2005,2008和2010);但我仍然得到错误。

编辑2:

由于@jpmc26提到了tnsnames.ora个文件,我决定补充一点,我试图制作一个tnsnames.ora和一个sqlplus.ora文件并将它们放在目录C:\oracle\instant_client_11_1\network\admin中;但是当我用谷歌搜索时,我意识到如果你使用cx_Oracle.connect(username, password, cx_Oracle.makedsn(ip, port, sid))命令,你可以跳过.ora个文件。 cx_Oracle.makedsn会使结构本身。

2 个答案:

答案 0 :(得分:6)

我尝试了很多方法来最终解决问题。既然我认为我应该写一个全面的答案,我会分别写下我面临的问题和解决方案;希望它可以帮助别人。我还将问题的名称改为适当的名称。这是我在Windows 7中安装cx_Oracle模块时遇到的问题 - 32位版本(我认为其他版本的Windows会有类似的解决方案,但我不确定):

  • 我尝试使用cx_Oracle安装easy_install,我得到了 错误No oracle client installed。我已经下载了oracle Windows的基本即时客户端和oracle sdk即时客户端 Oracle官方网站,并通过以下步骤安装:

      

    将oracle基本即时客户端解压缩到目录C:\oracle\instant_client_11_1\

         

    解压缩oracle sdk即时客户端并将文件夹sdk复制到目录C:\oracle\instant_client_11_1\中,因此我们有一个目录C:\oracle\instant_client_11_1\sdk\

         

    C:\oracle\instant_client_11_1\添加到PATH环境变量的末尾。

         

    添加名为ORACLE_HOME的新变量,并为该值设置C:\oracle\instant_client_11_1\

         

    重新启动计算机。

  • 我尝试再次使用cx_Oracle安装easy_install,我得到了 错误command ‘gcc’ failed: no such file or directory和某些错误 案例unable to find vcvarsall.bat;这是因为我没有 一个C ++编译器,所以我按照这些步骤来解决它:

      

    下载Microsoft Visual C ++并安装它。

         

    下载MinGW并安装它;请注意,您必须安装GCC模块。

         

    C:\MinGW\C:\MinGW\bin\(包含gcc.exe)添加到PATH环境变量的末尾。

  • 我尝试再次使用cx_Oracle安装easy_install,我得到了 错误command ‘gcc’ failed with exit status 1;我试过这一步 解决它:

      

    打开文件C:\Python27\Lib\distutils\ cygwincompiler.py并删除此文件中的所有–mno-cygwin次出现;这是因为GCC的最新版本已删除了–mno-cygwin选项,它不应该存在。

  • 我尝试使用cx_Oracle安装easy_install并且有效。

但是在网上搜索时我发现了一些可能有用的技巧:

  • 如果您收到错误no module named win32api,那是因为您没有 你应该在你的计算机上安装python的win32扩展 从Source Forge下载pywin32模块 并安装它。

  • 如果您没有成功,可以尝试较早版本的cx_Oracle;但请记住我们在上述内容中谈到的所有内容。您可以找到cx_Oracle here的所有版本。

  • 如果您想使用sqlplus,您还应该执行其他一些步骤。为此,请搜索互联网。

答案 1 :(得分:2)

您可能想尝试一些pre-built binaries。不幸的是,安装程序是MSI,因此无法使用virtualenv进行安装。

我相信您在ora文件中引用的是TNS名称文件。如果是这样,它是具有特定格式的纯文本文件。这可能会有所帮助:http://www.orafaq.com/wiki/Tnsnames.ora。根据{{​​3}},Oracle将在TNS_ADMIN目录中查找文件tnsnames.ora。请注意,使用TNS名称文件可能是可选的。在许多情况下,您可以放弃通常放在TNS名称文件中的内容(类似(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=ORA11)))),与TNS名称相同。

欢迎使用Oracle。祝好运。你需要它。 (是的,Oracle的一切都很复杂。)