Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


13.18.2 データ型

〈この項の構成〉

(1) 検索データ取得時のマッピング

HiRDBから検索データを取得した場合の,HiRDBのSQLデータ型と,取得されるPythonオブジェクトのクラスのマッピングを次の表に示します。

表13‒33 HiRDBのSQLデータ型と,取得されるPythonオブジェクトのクラスのマッピング

HiRDBのSQLデータ型

Pythonオブジェクトのクラス

INT

int

SMALLINT

int

DEC

decimal.Decimal

FLOAT

float

REAL

float

CHAR

str

VARCHAR

str

NCHAR

str

NVARCHAR

str

MCHAR

str

MVARCHAR

str

BINARY

bytes

BLOB

bytes

DATE

datetime.date

TIME

datetime.time

TIMESTAMP

datetime.datetime

INTERVAL HOUR TO SECOND

INTERVAL YEAR TO DAY

(凡例)

−:未サポート

(2) ?パラメタ設定時のマッピング

SQLの?パラメタとして設定するPythonオブジェクトのクラスと,HiRDBのSQLデータ型のマッピングを次の表に示します。

表13‒34 パラメタに設定するPythonオブジェクトのクラスと,HiRDBのSQLデータ型のマッピング(1/2)

Pythonオブジェクトのクラス

INT

SMALLINT

DEC

FLOAT

REAL

CHAR

VARCHAR

MCHAR

MVARCHAR

int

decimal.Decimal

float

str

bytes

×

×

×

×

datetime.date

×

×

×

×

datetime.time

×

×

×

×

datetime.datetime

×

×

×

×

表13‒35 パラメタに設定するPythonオブジェクトのクラスと,HiRDBのSQLデータ型のマッピング(2/2)

Pythonオブジェクトのクラス

NCHAR

NVARCHAR

BINARY

BLOB

DATE

TIME

TIMESTAMP

int

×

×

×

×

×

decimal.Decimal

×

×

×

×

×

float

×

×

×

×

×

str

×

×

×

※2

bytes

×

※1

×

×

×

datetime.date

×

×

×

×

datetime.time

×

×

×

×

datetime.datetime

×

×

×

×

※2

(凡例)

◎:マッピングすることを推奨します。

〇:マッピングできます。ただし,変換元データの形式によっては,データの欠落や変換エラーとなることがあるため,注意してください。

×:マッピングできません。

注※1

データ型としてSQL_LONGVARBINARYを指定してください。

指定方法は,Cursorクラスのsetinputsizesメソッドの引数の,パラメタ番号に対応する位置に(pyodbc.SQL_LONGVARBINARY,定義長)を指定してください。

BINARY(100000)の列に第2パラメタでINSERTする場合の例を示します。

cur.setinputsizes([None,(pyodbc.SQL_LONGVARBINARY,100000)])
cur.execute("INSERT INTO TABLE1 VALUES (?,?,?)",123,b"ABC",456)
注※2

datetime.datetimeをパラメタ値として指定すると,小数秒が設定されている場合に小数秒が切り捨てられて設定されます。小数秒まで含む値を設定したい場合は,strをパラメタ値として使用し,データ型としてSQL_CHAR(長さ26)を指定してください。

指定方法は,Cursorクラスのsetinputsizesメソッドの引数の,パラメタ番号に対応する位置に(pyodbc.SQL_CHAR,26)を指定してください。

TIMESTAMP(6)の列に第2パラメタでINSERTする場合の例を示します。

cur.setinputsizes([None,(pyodbc.SQL_CHAR,26)])
cur.execute("INSERT INTO TABLE2 VALUES (?,?,?)",123,"2000-12-31 12:34:56.123456",456)

(3) HiRDBサーバの文字コードとエンコーディング

HiRDBサーバの文字コードと,それに対応したUAPの設定について次の表に示します。

表13‒36 HiRDBサーバの文字コードに対応したUAPの設定

プラットフォーム

サーバの文字コード

EUC

UTF-8

SJIS

Windows

クライアント環境定義PDCLTCNVMODEにUCS2_UJISを設定してください。

クライアント環境定義PDCLTCNVMODEにUCS2_UTF8を設定してください。

Connectionクラスのsetencodingメソッドに"shift-jis"を指定してください。

Linux

Connectionクラスのsetencodingメソッドに"shift-jis"を指定してください

注※

Connectionクラスのsetencodingメソッドに"shift-jis"を指定した場合,SQL文に全角文字が含まれるとエラーとなります。このため,SQL文に全角文字が含まれる場合,setencodingメソッドは指定しないで,パラメタとして文字列を指定する個所で,データ型としてSQL_VARCHARを指定してください。

指定方法は,Cursorクラスのsetinputsizesメソッドの引数の,パラメタ番号に対応する位置に(pyodbc.SQL_VARCHAR,列のバイト長)を指定してください。

CHAR(10)の列に第2パラメタでINSERTする場合の例を示します。

cur.setinputsizes([None,(pyodbc.SQL_VARCHAR,10)])
cur.execute("INSERT INTO TABLE3 VALUES (?,?,?)",123,"あいう",456)