13.18.2 データ型
(1) 検索データ取得時のマッピング
HiRDBから検索データを取得した場合の,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データ型のマッピングを次の表に示します。
Pythonオブジェクトのクラス |
INT SMALLINT |
DEC |
FLOAT REAL |
CHAR VARCHAR MCHAR MVARCHAR |
---|---|---|---|---|
int |
◎ |
〇 |
〇 |
〇 |
decimal.Decimal |
〇 |
◎ |
〇 |
〇 |
float |
〇 |
〇 |
◎ |
〇 |
str |
〇 |
〇 |
〇 |
◎ |
bytes |
× |
× |
× |
× |
datetime.date |
× |
× |
× |
× |
datetime.time |
× |
× |
× |
× |
datetime.datetime |
× |
× |
× |
× |
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の設定について次の表に示します。
プラットフォーム |
サーバの文字コード |
||
---|---|---|---|
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)