-
Notifications
You must be signed in to change notification settings - Fork 21
Description
Dears,
I got the following trace back error when the table which I am reflecting has columns of type TIMESTAMP(0)
Traceback (most recent call last):
File "", line 1, in
dial=sa.Table('H_DIAL',meta,schema='TDSTATS',autoload=True, autoload_with=engine)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 439, in new
metadata._remove_table(name, schema)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\util\langhelpers.py", line 66, in exit
compat.reraise(exc_type, exc_value, exc_tb)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\util\compat.py", line 187, in reraise
raise value
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 434, in new
table._init(name, metadata, *args, **kw)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 514, in _init
include_columns, _extend_on=_extend_on)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 527, in _autoload
_extend_on=_extend_on
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 2045, in run_callable
return conn.run_callable(callable_, *args, **kwargs)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1534, in run_callable
return callable_(self, *args, **kwargs)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\engine\default.py", line 372, in reflecttable
table, include_columns, exclude_columns, **opts)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\engine\reflection.py", line 598, in reflecttable
table_name, schema, **table.dialect_kwargs):
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy\engine\reflection.py", line 369, in get_columns
**kw)
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy_teradata\dialect.py", line 183, in get_columns
return [self._get_column_info(row) for row in res]
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy_teradata\dialect.py", line 183, in
return [self._get_column_info(row) for row in res]
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy_teradata\dialect.py", line 153, in _get_column_info
fmt=row['columnformat'])
File "C:\Program Files\Anaconda3\lib\site-packages\sqlalchemy_teradata\dialect.py", line 129, in _resolve_type
prec = int(prec[prec.index('(') + 1: prec.index(')')])
ValueError: substring not found
I traced back and found the error in the following function
def _resolve_type(self, t, **kw):
"""
Resolve types for String, Numeric, Date/Time, etc. columns
"""
t = self.normalize_name(t)
if t in ischema_names:
t = ischema_names[t]
if issubclass(t, sqltypes.String):
return t(length=kw['length']/2 if kw['chartype']=='UNICODE' else kw['length'],\
charset=kw['chartype'])
elif issubclass(t, sqltypes.Numeric):
return t(precision=kw['prec'], scale=kw['scale'])
elif issubclass(t, sqltypes.Time) or issubclass(t, sqltypes.DateTime):
prec = kw['fmt']
prec = int(prec[prec.index('(') + 1: prec.index(')')])
return t(precision=prec)
else:
return t() # For types like Integer, ByteInt
return None
I propose to solve this problem the function should be
def _resolve_type(self, t, **kw):
"""
Resolve types for String, Numeric, Date/Time, etc. columns
"""
t = self.normalize_name(t)
if t in ischema_names:
t = ischema_names[t]
if issubclass(t, sqltypes.String):
return t(length=kw['length']/2 if kw['chartype']=='UNICODE' else kw['length'],\
charset=kw['chartype'])
elif issubclass(t, sqltypes.Numeric):
return t(precision=kw['prec'], scale=kw['scale'])
elif issubclass(t, sqltypes.Time) or issubclass(t, sqltypes.DateTime):
prec = kw['fmt']
try:
prec = int(prec[prec.index('(') + 1: prec.index(')')])
except:
prec=0
return t(precision=prec)
else:
return t() # For types like Integer, ByteInt
return None