我试图在python中使用cx_Oracle
模块来访问远程数据库,并插入或删除表中的行。 BTW我已经下载了Oracle即时客户端11.1以及odbc和sqlplus版本。 我已经设置了环境variablesORACLE_HOME
和TNS_ADMIN
到目录我有解压缩的文件,并将此目录添加到PATH
variables。 当我GOOGLE了,我认为应该有一些.ora
文件,但我找不到它们。
我可以从命令行使用sqlplus
命令,但是我的主要问题是我无法安装和使用cx_Oracle
。 我不想使用任何命令行脚本; 我只想使用cx_Oracle
作为API。
任何人都可以给我一个完整的解释,我真的卡在那里。 这个地区的所有文件都是模糊的。 最好的祝福。
编辑1:
我用python setup.py install
和python 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的一切都很复杂。)