在Windows中部署cx_Oracle

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

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

任何人都可以给我一个完整的解释,我真的卡在那里。 这个地区的所有文件都是模糊的。 最好的祝福。

编辑1:

我用python setup.py installpython setup.py build --compiler=mingw32命令尝试了cx_Oracle的源码包。 我没有再次得到oracle错误,但我得到command 'gcc' failed错误。 我尝试了MinGW编译器,并编辑了环境variablesPATH以包含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 ; 但是当我GOOGLE了我意识到,如果你使用cx_Oracle.connect(username, password, cx_Oracle.makedsn(ip, port, sid))命令,你可以跳过.ora文件。 cx_Oracle.makedsn会使结构本身。

我尝试了很多方法来最终解决问题。 既然我想我应该写一个全面的答案,我会分别写出我面临的问题和他们的解决方案; 希望能够帮助别人。 我也把问题的名字改成了适当的名字。 这是我在安装Windows 7 – 32位版本的cx_Oracle模块的过程中所经历的(我认为其他版本的Windows将有类似的解决方案,但我不确定):

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

    将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\

    重新启动计算机。

  • 我试图再次安装使用easy_install cx_Oracle ,我得到错误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环境变量的末尾。

  • 我试图再次使用easy_install安装cx_Oracle ,并且出现错误command 'gcc' failed with exit status 1 ; 我试过这一步来解决它:

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

  • 我试图使用easy_install安装cx_Oracle ,它工作。

但在互联网搜索过程中,我发现了一些可能有用的技巧:

  • 如果你没有错误的no module named win32api ,这是因为你没有在你的电脑上安装python的win32扩展,你应该从Source Forge下载pywin32模块并安装它。

  • 如果你还没有成功,你可以尝试一个旧版本的cx_Oracle ; 但请记住我们在上面提到的所有问题。 你可以在这里找到所有版本的cx_Oracle

  • 如果你想使用sqlplus你应该做一些其他的步骤。 为此目的搜索互联网。

你可能想尝试一些预先构建的二进制文件 。 不幸的是,安装程序是一个MSI,所以安装使用virtualenv是不可能的。

我相信你所说的ora文件是TNS名称文件。 如果是这样,这是一个具有特定格式的纯文本文件。 这可能有助于: http : //www.orafaq.com/wiki/Tnsnames.ora 。 根据FAQ ,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)))例如(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=ORA11))) )在同一个地方你会得到一个TNS名字。

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