Pythonに関する追加情報

この項の内容は次のとおりです。

Pythonアプリケーションの型マッピング

python-oracledb型(言語拡張モジュールを介して入手可能)とTimesTen SQL型とのマッピングがあります。

表3-1に、python-oracledb型(言語拡張モジュールを介して入手可能)とTimesTen SQL型とのマッピングを示します。

ノート:

TimesTenでの暗黙的データ型変換により、追加のTimesTen SQL型をこれらのpython-oracledb型にマップできます。『Oracle TimesTen In-Memory Database SQLリファレンス』データ型の変換を参照してください。

現在のリリースでのデータ型サポートの最新情報については、TimesTen PythonのサンプルにあるREADME.mdファイルを参照してください。

表3-1 python-oracledbの型マッピング

python-oracledbの型 TimesTenの型

oracledb.DB_TYPE_BINARY_DOUBLE

BINARY_DOUBLE

oracledb.DB_TYPE_BINARY_FLOAT

BINARY_FLOAT

oracledb.DB_TYPE_BLOB

BLOB

oracledb.DB_TYPE_CHAR

CHAR

oracledb.DB_TYPE_CLOB

CLOB

oracledb.DB_TYPE_CURSOR

REF CURSOR

oracledb.DB_TYPE_DATE

DATE

oracledb.DB_TYPE_NCHAR

NCHAR (TimesTenではこの型はUTF-16のみです。)

oracledb.DB_TYPE_NCLOB

NCLOB

oracledb.DB_TYPE_NUMBER

NUMBERTT_BIGINTTT_INTEGERTT_SMALLINTTT_TINYINT

oracledb.DB_TYPE_NVARCHAR

NVARCHAR2 (TimesTenではこの型はUTF-16のみです。)

oracledb.DB_TYPE_RAW

BINARYVARBINARY

oracledb.DB_TYPE_ROWID

ROWID

oracledb.DB_TYPE_TIMESTAMP

TIMESTAMPTT_TIMESTAMP

oracledb.DB_TYPE_VARCHAR

VARCHAR2

Pythonの障害モード

Pythonにはいくつかの障害モードがあります。

次のことに注意してください。

  • エラー・メッセージが、同じ条件下でOracleによって生成されるメッセージとは若干異なる場合があります。

  • PythonのメソッドCursor.executemany()については、TimesTenでは、batcherrorsオプションは無視されるためデフォルトのbatcherrors=false設定のみがサポートされています。バッチ内のいずれかの行でエラーが発生した場合は、必ずエラーが返されます。(これに対して、Oracle Databaseではbatcherrors=trueがサポートされており、バッチ内のいずれかの行が成功すると必ず成功が返されます。)また、TimesTenデータベースに対して、1つのバッチ内で複数のエラーが発生した場合、TimesTenではエラーの順序付けは試行されませんが、Oracleデータベースに対して発生した場合にはそれらは順序付けられます。

Pythonサンプル: TimesTenに接続してSQLを実行する

このサンプル・プログラムは、次を実行します:

  • TimesTenデータベースに接続します。

  • employeesという名前の表を作成します。

  • 表に3つの行を挿入します。

  • 行を選択して表示します。

  • 表を削除します。

  • データベースから切断します。

import oracledb

def run():
  try:
    oracledb.init_oracle_client();
    connection = oracledb.connect(
        user='appuser', 
        password='password', 
        dsn='localhost/sampledb:timesten_direct')
    cursor = connection.cursor()
    cursor.execute('''
        CREATE TABLE employees(first_name VARCHAR2(20), last_name VARCHAR2(20))''')
    print('Table created')
    values = [['ROBERT', 'ROBERTSON'], ['ANDY', 'ANDREWS'], ['MICHAEL', 'MICHAELSON']]
    cursor.executemany('INSERT INTO employees VALUES (:1, :2)', values)
    print('Inserted', len(values), 'employees into the table')
    cursor.execute('''
        SELECT first_name, last_name FROM employees''')
    for fname, lname in cursor:
      print('Selected employee:', fname, lname)
    cursor.execute('DROP TABLE employees')
    print('Table dropped')
    cursor.close()
    connection.close()
    print('Connection closed')

  except Exception as e:
    print('An error occurred', str(e))

run()

このサンプル・プログラムを実行してTimesTenデータベースに接続すると、次の出力が返されます:

Table created
Inserted 3 employees into the table
Selected employee: ROBERT ROBERTSON
Selected employee: ANDY ANDREWS
Selected employee: MICHAEL MICHAELSON
Table dropped
Connection closed

サンプル・プログラムでデータベースへの接続に使用される簡易接続方法の詳細は、「タスク4: TimesTenの接続の構成」を参照してください。

ダウンロード用のPythonサンプル・プログラム

TimesTenは、python-oracledbドライバを介したPythonのサンプル・プログラムを提供します。 これらのサンプル・プログラムは、TimesTen Pythonサンプルで入手できます。