我搜索了很多以找到任何 python 模块来访问 TimesTen(在内存数据库中)。我正在编写一个自动化测试框架(更像是系统测试而不是单元测试)。有人知道这样的模块吗?最后的手段是自己编写包装器,但这是我真正想避免的事情。
5 回答
要将 Python 与 TimesTen(11.2 或 18.1)一起使用,您应该使用cx_Oracle
cx_Oracle 对于 TimesTen 和 Oracle RDBMS 的工作方式相同
cx_Oracle 使用ODPI-C,它是OCI的 C 库包装器
对于 TimesTen 和 Oracle RDBMS,cx_Oracle 可以在连接字符串中使用Easy connect 方法或tnsnames.ora。
以下 cx_Oracle 示例使用 tnsnames.ora [即 doug/doug@sampledb]
# myscript.py
from __future__ import print_function
import cx_Oracle
connection = cx_Oracle.connect("doug", "doug", "sampledb")
cursor = connection.cursor()
cursor.execute("insert into t values (42)")
connection.commit()
connection.close()
TimesTen 18.1.2.3 sampledb 的直接链接和客户端服务器 tnsnames.ora 条目是:
sampledb =(DESCRIPTION=(CONNECT_DATA = (SERVICE_NAME = sampledb)(SERVER = timesten_direct)))
sampledbCS =(DESCRIPTION=(CONNECT_DATA = (SERVICE_NAME = sampledbCS)(SERVER = timesten_client)))
与往常一样,您需要 source bin/ttenv.sh 来配置环境!
在我的 Ubuntu 16.04 机器上,我的 PATH 和 LD_LIBRARY_PATH 是:
echo $PATH /home/ubuntu/tt18123/bin:/home/ubuntu/tt18123/install/bin:/home/ubuntu/tt18123/install/ttoracle_home/instantclient_11_2:/home/ubuntu/tt18123/install/ttoracle_home/instantclient_11_2/sdk :/home/ubuntu/.cargo/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/ bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
echo $LD_LIBRARY_PATH /home/ubuntu/tt18123/ttclasses/lib:/home/ubuntu/tt18123/install/lib:/home/ubuntu/tt18123/install/ttoracle_home/instantclient_11_2
echo $TNS_ADMIN /home/ubuntu/tt18123/install/network/admin/samples
Oracle TimesTen 将在 TimesTen 18.1.3 中正式支持 ODPI-C 和 cx_Oracle
请避免将任何基于 ODBC 的 python 库与 TimesTen 一起使用,因为 cx_Oracle 是 Oracle Development 测试和开发的对象。
有pyodbc应该在 odbc 数据库上工作。我不确定它是否真的有效。我认为 pyodbc 需要 odbc 3,而 timesten 可能不支持(尚未检查),但值得一试。
还有mxODBC,我没有尝试过。这也可能奏效。
是的,所以这是我试用后的更新:(假设您使用的是某种 unix)它实际上与pyodbc和unixodbc一起使用。pyodbc 需要 ODBC3.x 而 TimesTen 不支持。但是,unixodbc 将为您在两者之间“翻译”。这意味着您不能使用 pyodbc 中的 timesten libodbc.so,因为它缺少 ODBC3 中的一堆函数。
我没有找到原生的,但 TimesTen 有您可以使用的 ODBC 接口。
@ScalableDBDoug,您介意提供 python 代码片段吗?我尝试在 python 脚本中使用 cx_Oracle 但收到错误消息:
cx_Oracle.DatabaseError: ORA-12547: TNS:lost contact
这是我的代码片段:
import cx_Oracle
dsn_tns = cx_Oracle.makedsn('TTSERVER',TTPORT,service_name='TTSERVICE');
print(dsn_tns)
connection = cx_Oracle.connect('USER', 'PASS', dsn_tns)
cursor = connection.cursor()
cursor.execute("""SELECT * FROM MYTABLE""")
for record in cursor:
print("Values:", record)
作为一种解决方法,我现在使用 UnixODBC 和 pyodbc 来查询 timesten 数据库,但是想使用本机 cx_Oracle 模块来访问 timesten。
谢谢,
通过 Python 模块访问 TimesTen 的最佳方式是使用cx_Oracle。
cx_Oracle 使用基于 OCI 的驱动程序。TimesTen 支持 OCI,您可以通过 tnsnames.ora 或 Easy Connect 命名方法进行连接,就像使用 Oracle DB 一样。