from sqlalchemy.engine import default, base
import sqlalchemy.types as sqltypes
+import datetime
class OracleNumeric(sqltypes.Numeric):
def get_col_spec(self):
return "SMALLINT"
+class OracleDate(sqltypes.Date):
+ def get_col_spec(self):
+ return "DATE"
+ def convert_bind_param(self, value, dialect):
+ return value
+ def convert_result_value(self, value, dialect):
+ if not isinstance(value, datetime.datetime):
+ return value
+ else:
+ return value.date()
+
class OracleDateTime(sqltypes.DateTime):
def get_col_spec(self):
return "DATE"
sqltypes.Numeric : OracleNumeric,
sqltypes.Float : OracleNumeric,
sqltypes.DateTime : OracleDateTime,
- sqltypes.Date : OracleDateTime,
+ sqltypes.Date : OracleDate,
sqltypes.String : OracleString,
sqltypes.Binary : OracleBinary,
sqltypes.Boolean : OracleBoolean,
ischema_names = {
'VARCHAR2' : OracleString,
- 'DATE' : OracleDateTime,
+ 'DATE' : OracleDate,
'DATETIME' : OracleDateTime,
'NUMBER' : OracleNumeric,
'BLOB' : OracleBinary,
global users_with_date, insert_data
if db.engine.name == 'oracle':
- # still trying to get oracle sub-second resolution to work
- oracle_subsecond = False
- if oracle_subsecond:
- import sqlalchemy.databases.oracle as oracle
- insert_data = [
- [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.date(2005,11,10), datetime.datetime(2005, 11, 10, 0, 0, 0, 29384)],
- [8, 'roy', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.date(2005,10,10), datetime.datetime(2006, 5, 10, 15, 32, 47, 6754)],
- [9, 'foo', datetime.datetime(2005, 11, 10, 11, 52, 35, 54839), datetime.date(1970,4,1), datetime.datetime(2004, 9, 18, 4, 0, 52, 1043)],
- [10, 'colber', None, None, None]
- ]
-
- fnames = ['user_id', 'user_name', 'user_datetime', 'user_date', 'user_time']
-
- collist = [Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20)), Column('user_datetime', DateTime),
- Column('user_date', Date), Column('user_time', oracle.OracleTimestamp)]
- else:
- insert_data = [
- [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.datetime(2005, 11, 10, 0, 0, 0)],
- [8, 'roy', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.datetime(2006, 5, 10, 15, 32, 47)],
- [9, 'foo', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.datetime(2004, 9, 18, 4, 0, 52)],
- [10, 'colber', None, None]
- ]
-
- fnames = ['user_id', 'user_name', 'user_datetime', 'user_date', 'user_time']
-
- collist = [Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20)), Column('user_datetime', DateTime),
- Column('user_date', DateTime)]
+ import sqlalchemy.databases.oracle as oracle
+ insert_data = [
+ [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.date(2005,11,10), datetime.datetime(2005, 11, 10, 0, 0, 0, 29384)],
+ [8, 'roy', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.date(2005,10,10), datetime.datetime(2006, 5, 10, 15, 32, 47, 6754)],
+ [9, 'foo', datetime.datetime(2006, 11, 10, 11, 52, 35), datetime.date(1970,4,1), datetime.datetime(2004, 9, 18, 4, 0, 52, 1043)],
+ [10, 'colber', None, None, None]
+ ]
+
+ fnames = ['user_id', 'user_name', 'user_datetime', 'user_date', 'user_time']
+
+ collist = [Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20)), Column('user_datetime', DateTime),
+ Column('user_date', Date), Column('user_time', TIMESTAMP)]
elif db.engine.name == 'mysql' or db.engine.name == 'mssql':
# these dont really support the TIME type at all
insert_data = [
#print repr(x)
def testdate2(self):
- t = Table('testdate', testbase.metadata, Column('id', Integer, primary_key=True),
+ t = Table('testdate', testbase.metadata, Column('id', Integer, Sequence('datetest_id_seq', optional=True), primary_key=True),
Column('adate', Date), Column('adatetime', DateTime))
t.create()
try: