доступ python к временной шкале

#python #timesten

#python #временная отметка

Вопрос:

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

Комментарии:

1. Вы нашли решение? Если бы вы написали оболочку ODBC, не могли бы вы поделиться ею?

Ответ №1:

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

cx_Oracle работает одинаково как для TimesTen, так и для СУБД Oracle

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

Как для TimesTen, так и для СУБД Oracle 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 =(ОПИСАНИЕ=(CONNECT_DATA = (SERVICE_NAME = sampledb)(СЕРВЕР = timesten_direct)))

sampledbCS =(ОПИСАНИЕ=(CONNECT_DATA = (SERVICE_NAME = sampledbCS)(СЕРВЕР = 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/образцы

Oracle TimesTen официально будет поддерживать ODPI-C и cx_Oracle в TimesTen 18.1.3

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

Ответ №2:

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

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

Комментарии:

1. Я видел эту ссылку и на других форумах. Я знаю, что TimesTen имеет доступ к ODBC, но тогда мне нужно будет самому написать модуль python, который будет вызывать API TimesTen ODBC. Я хочу избежать этого из-за ограничений по времени.

2. bytes.com/topic/python/answers / … — Я думаю, что лучше дать ссылку на ODBC и Python , а не просто вставить дословный ответ, который ссылается на какой-то агрегатор. @Sudeep — похоже, что невозможно избежать требования написания кода ODBC, в PyPI или сети нет модуля.

Ответ №3:

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

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

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

Ответ №4:

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

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

Ответ №5:

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

Спасибо,