доступ Python к TimesTen

Я много гуглил, чтобы найти любой модуль Python для доступа к TimesTen (в базе данных памяти). Я пишу структуру автоматического тестирования (больше похожую на системный тест, а не на модульный тест). Кто-нибудь знает о таком модуле? В крайнем случае я сам напишу обертку, но этого я действительно хочу избежать.


person Sudeep    schedule 02.11.2011    source источник
comment
Вы нашли решение? Если вы написали оболочку ODBC, не могли бы вы поделиться ею?   -  person loopbackbee    schedule 09.08.2013


Ответы (5)


Чтобы использовать Python с TimesTen (11.2 или 18.1), вы должны использовать cx_Oracle

cx_Oracle работает одинаково как для TimesTen, так и для Oracle RDBMS.

cx_Oracle использует ODPI-C, который является оболочкой библиотеки C для OCI

Как для 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()

Записи tnsnames.ora с прямым подключением и клиентским сервером для TimesTen 18.1.2.3 sampledb:

sampledb = (DESCRIPTION = (CONNECT_DATA = (SERVICE_NAME = sampledb) (SERVER = timesten_direct)))

sampledbCS =(DESCRIPTION=(CONNECT_DATA = (SERVICE_NAME = sampledbCS)(SERVER = timesten_client)))

Как всегда, для настройки среды вам потребуется исходный файл 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 будет официально поддерживать ODPI-C и cx_Oracle в TimesTen 18.1.3

Пожалуйста, избегайте использования любых библиотек Python на основе ODBC с TimesTen, поскольку cx_Oracle — это то, что Oracle Development тестирует и разрабатывает.

person ScalableDBDoug    schedule 12.11.2019

Я не нашел родного, но у TimesTen есть интерфейс ODBC, который вы могли бы использовать.

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

person NitWit    schedule 02.11.2011
comment
Эту ссылку я видел и на других форумах. Я знаю, что TimesTen имеет доступ к ODBC, но тогда мне нужно будет самому написать модуль Python, который будет вызывать API TimesTen ODBC. Я хочу избежать этого из-за нехватки времени. - person Sudeep; 02.11.2011
comment
bytes.com/topic/python/answers/ - Я думаю, что лучше дать ссылку на ODBC и Python, чем просто вставлять какой-то ответ дословно. который ссылается на какой-то агрегатор. @Sudeep - похоже, что нет необходимости писать код ODBC, нет модуля в PyPi или в сети. - person wkl; 02.11.2011

Существует pyodbc, который должен работать с базами данных odbc. Я не уверен, что это действительно сработает. Я думаю, что pyodbc требует odbc 3, и timeten может не поддерживать это (не проверял), но стоит проверить.

Существует также mxODBC, который я не пробовал. Это тоже может сработать.

Итак, вот обновление, так как я попробовал это: (Предполагая, что вы используете какую-то Unix) Это действительно работает с pyodbc вместе с unixodbc. pyodbc требует ODBC3.x, а TimesTen его не поддерживает. Но unixodbc будет «переводить» между ними для вас. Это означает, что вы не можете использовать временной интервал libodbc.so из pyodbc, так как в нем отсутствует множество функций из ODBC3.

person Mattias Nilsson    schedule 25.01.2012

Лучший способ получить доступ к TimesTen через модуль Python — использовать cx_Oracle.

cx_Oracle использует драйвер на основе OCI. TimesTen поддерживает OCI, и вы можете подключиться через tnsnames.ora или метод именования Easy Connect, как и для БД Oracle.

person ScalableDBDoug    schedule 02.05.2018

@ScalableDBDoug, не могли бы вы предоставить фрагмент кода Python? Я пытался использовать cx_Oracle в скрипте Python, но получал сообщение об ошибке:

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.

Спасибо,

person Husnain Taseer    schedule 07.11.2019