【问题标题】:is cx_Oracle in Flask-SQLAlchemy can be accessed only through oracle-instant Client?Flask-SQLAlchemy中的cx_Oracle只能通过oracle-instant Client访问吗?
【发布时间】:2019-06-30 02:10:10
【问题描述】:

我的 oracle 数据库 [OracleSlim] 在 Docker 容器中启动并运行,我在容器内创建了一个用户表。它在 0.0.0.0:1521 上运行。我是否需要“安装 oracle 即时客户端”才能使 cx_oracle 正常工作?

我在容器内尝试了这个“sqlplus 管理员/Welcome121@ORCLCDB”连接字符串。它正在工作。

from sqlalchemy import create_engine
import cx_Oracle
engine=create_engine('oracle://username:password@hostname:port/sid')

错误:

cx_Oracle.DatabaseError: DPI-1047: 64 位 Oracle 客户端库不能 被加载:“libclntsh.so:无法打开共享对象文件:没有这样的文件 或目录”。见 https://oracle.github.io/odpi/doc/installation.html#linux求帮助

我的烧瓶-Sqlalchemy 的引擎对象中的一个成功的 oracle 连接。 欢迎使用新的 ORM 或用于连接 oracle 的包。 注意:我没有在本地安装 oracle 即时客户端 但已将其安装在我的容器中。

更新

现在我的 Docker 容器上运行了 Oracle。我将在本地连接来自 Python cx_Oracle 的那些。用下面的方法,

import cx_Oracle
constr = 'system/oracle@//172.17.0.2:1521/orcl.localdomain'
conn = cx_Oracle.connect(constr)

是否可以在 python cx_Oracle 或 Flask-SQLAlchemy 的帮助下连接在 localhost:1521 上运行的容器?

【问题讨论】:

  • 你解决了吗?

标签: python docker sqlalchemy cx-oracle


【解决方案1】:

如果sqlplus administrator/Welcome121@ORCLCDB' 正在工作,那么您必须已经有可用的 Oracle 客户端库,因为 sqlplus 和 cx_Oracle 都需要相同的 Oracle 库集。验证 sqlplus 是否真的可以查询您的数据库。

检查 SQL*Plus 版本是否为 11.2 或更高。然后找出你对 sqlplus 和 python 的配置之间的区别。配置 cx_Oracle 所需的环境变量,与 sqlplus 相同。如果您安装了完整的 Oracle 客户端或 Oracle DB,则可以在运行 python 之前使用source /usr/local/bin/oraenv 设置环境。如果您有旧的 Oracle XE 11.2,则命令为 source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

如果您没有 Oracle 客户端库,请按照 https://cx-oracle.readthedocs.io/en/latest/installation.html#installing-cx-oracle-on-linux 安装它们,我建议使用 ldconfig 设置库搜索路径。

【讨论】:

【解决方案2】:

您确实需要 oracle 客户端库:

这来自 cx_Oracle 文档:

要将 cx_Oracle 7 与 Python 和 Oracle 数据库一起使用,您需要: Python 2.7 或 3.5 及更高版本。旧版本的 cx_Oracle 可能适用于旧版本的 Python。 Oracle 客户端库。这些可以来自免费的 Oracle Instant Client,或者如果 Python 与数据库位于同一台计算机上,则这些客户端包含在 Oracle 数据库中。 Linux、Windows 和 macOS 支持 Oracle 客户端库版本 18、12 和 11.2。用户还报告了其他平台的成功。 甲骨文数据库。 Oracle 的标准客户端-服务器版本互操作性允许 cx_Oracle 连接到较旧和较新的数据库。

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2018-02-23
    • 2021-06-25
    • 2023-03-21
    • 2021-09-12
    • 2018-07-21
    相关资源
    最近更新 更多