2

我搜索了很多以找到任何 python 模块来访问 TimesTen(在内存数据库中)。我正在编写一个自动化测试框架(更像是系统测试而不是单元测试)。有人知道这样的模块吗?最后的手段是自己编写包装器,但这是我真正想避免的事情。

4

5 回答 5

2

要将 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 测试和开发的对象。

于 2019-11-12T05:57:43.897 回答
0

pyodbc应该在 odbc 数据库上工作。我不确定它是否真的有效。我认为 pyodbc 需要 odbc 3,而 timesten 可能不支持(尚未检查),但值得一试。

还有mxODBC,我没有尝试过。这也可能奏效。

是的,所以这是我试用后的更新:(假设您使用的是某种 unix)它实际上与pyodbc和unixodbc一起使用。pyodbc 需要 ODBC3.x 而 TimesTen 不支持。但是,unixodbc 将为您在两者之间“翻译”。这意味着您不能使用 pyodbc 中的 timesten libodbc.so,因为它缺少 ODBC3 中的一堆函数。

于 2012-01-25T17:24:08.703 回答
0

我没有找到原生的,但 TimesTen 有您可以使用的 ODBC 接口。

http://www.compwisdom.com/topics/ODBC

于 2011-11-02T14:45:10.827 回答
0

@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。

谢谢,

于 2019-11-07T15:03:52.193 回答
0

通过 Python 模块访问 TimesTen 的最佳方式是使用cx_Oracle

cx_Oracle 使用基于 OCI 的驱动程序。TimesTen 支持 OCI,您可以通过 tnsnames.ora 或 Easy Connect 命名方法进行连接,就像使用 Oracle DB 一样。

于 2018-05-02T14:54:20.723 回答