Я много гуглил, чтобы найти любой модуль Python для доступа к TimesTen (в базе данных памяти). Я пишу структуру автоматического тестирования (больше похожую на системный тест, а не на модульный тест). Кто-нибудь знает о таком модуле? В крайнем случае я сам напишу обертку, но этого я действительно хочу избежать.
доступ Python к TimesTen
Ответы (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 тестирует и разрабатывает.
Я не нашел родного, но у TimesTen есть интерфейс ODBC, который вы могли бы использовать.
http://www.compwisdom.com/topics/ODBC
Существует pyodbc, который должен работать с базами данных odbc. Я не уверен, что это действительно сработает. Я думаю, что pyodbc требует odbc 3, и timeten может не поддерживать это (не проверял), но стоит проверить.
Существует также mxODBC, который я не пробовал. Это тоже может сработать.
Итак, вот обновление, так как я попробовал это: (Предполагая, что вы используете какую-то Unix) Это действительно работает с pyodbc вместе с unixodbc. pyodbc требует ODBC3.x, а TimesTen его не поддерживает. Но unixodbc будет «переводить» между ними для вас. Это означает, что вы не можете использовать временной интервал libodbc.so из pyodbc, так как в нем отсутствует множество функций из ODBC3.
Лучший способ получить доступ к TimesTen через модуль Python — использовать cx_Oracle.
cx_Oracle использует драйвер на основе OCI. TimesTen поддерживает OCI, и вы можете подключиться через tnsnames.ora или метод именования Easy Connect, как и для БД Oracle.
@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.
Спасибо,