我正在尝试在python中使用cx_Oracle
模块来访问远程数据库并在表中插入或删除行。 BTW我已经下载了oracle即时客户端11.1以及odbc和sqlplus版本。我已将环境变量ORACLE_HOME
和TNS_ADMIN
设置到目录我已解压缩的文件,并将此目录添加到PATH
变量。当我用Google搜索时,我认为应该有一些.ora
文件,但我找不到它们。
我可以从命令行使用sqlplus
命令,但我的主要问题是我无法安装和使用cx_Oracle
。我不想使用任何命令行脚本;我只想使用cx_Oracle
作为API。
任何人都可以给我一个完整的解释,我真的被困在那里了。该领域的所有文件都含糊不清。最诚挚的问候。
编辑1:
我使用cx_Oracle
和python 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
会使结构本身。
答案 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的一切都很复杂。)