Support Time type.

master
baztian 2015-02-08 16:09:47 +01:00
parent a40827a0e7
commit b1d627abf5
5 changed files with 35 additions and 0 deletions

View File

@ -158,6 +158,8 @@ Changelog
- Improve robustness of java to python type conversion.
- Support Time type.
- Add DB-API compliant exception handling.
- Minor documentation improvements.

View File

@ -526,6 +526,12 @@ def _to_datetime(rs, col):
d = d.replace(microsecond=int(str(java_val.getNanos())[:6]))
return str(d)
def _to_time(rs, col):
java_val = rs.getTime(col)
if not java_val:
return
return str(java_val)
def _to_date(rs, col):
java_val = rs.getDate(col)
if not java_val:
@ -579,6 +585,7 @@ _DEFAULT_CONVERTERS = {
# http://download.oracle.com/javase/6/docs/api/java/sql/Types.html
# for possible keys
'TIMESTAMP': _to_datetime,
'TIME': _to_time,
'DATE': _to_date,
'BINARY': _to_binary,
'DECIMAL': _to_double,

View File

@ -5,6 +5,7 @@ create table Account (
"BLOCKING" DECIMAL,
"DBL_COL" DOUBLE,
"OPENED_AT" DATE,
"OPENED_AT_TIME" TIME,
"VALID" BOOLEAN,
"PRODUCT_NAME" VARCHAR(50),
"STUFF" BLOB,

View File

@ -5,6 +5,7 @@ create table Account (
"BLOCKING" DECIMAL,
"DBL_COL" DOUBLE,
"OPENED_AT" DATE,
"OPENED_AT_TIME" TIME,
"VALID" BOOLEAN,
"PRODUCT_NAME" VARCHAR(50),
primary key ("ACCOUNT_ID")

View File

@ -162,6 +162,27 @@ class IntegrationTestBase(object):
dbl_col, '2008-02-27', valid, product_name )
self.assertEqual(result, exp)
def test_execute_type_time(self):
cursor = self.conn.cursor()
stmt = "insert into ACCOUNT (ACCOUNT_ID, ACCOUNT_NO, BALANCE, " \
"OPENED_AT_TIME) " \
"values (?, ?, ?, ?)"
d = self.dbapi
account_id = d.Timestamp(2010, 01, 26, 14, 31, 59)
account_no = 20
balance = 1.2
opened_at_time = d.Time(13, 59, 59)
parms = (account_id, account_no, balance, opened_at_time)
cursor.execute(stmt, parms)
stmt = "select ACCOUNT_ID, ACCOUNT_NO, BALANCE, OPENED_AT_TIME " \
"from ACCOUNT where ACCOUNT_NO = ?"
parms = (20, )
cursor.execute(stmt, parms)
result = cursor.fetchone()
cursor.close()
exp = ( '2010-01-26 14:31:59', account_no, balance, '13:59:59' )
self.assertEqual(result, exp)
def test_execute_different_rowcounts(self):
cursor = self.conn.cursor()
stmt = "insert into ACCOUNT (ACCOUNT_ID, ACCOUNT_NO, BALANCE) " \
@ -206,6 +227,9 @@ class SqlitePyTest(SqliteTestBase, unittest.TestCase):
import sqlite3
return sqlite3, sqlite3.connect(':memory:')
def test_execute_type_time(self):
"""Time type not supported by PySqlite"""
class SqliteXerialTest(SqliteTestBase, unittest.TestCase):
def connect(self):