**Sybase ASE**
-------------------------------------------------------------------------------------------------------------------------------
mxodbc_ ``sybase+mxodbc`` development development no yes yes
-pyodbc_ ``sybase+pyodbc`` partial development no unknown unknown
-python-sybase_ ``sybase+pysybase``\* partial development no yes yes
+pyodbc_ ``sybase+pyodbc``\* partial development no unknown unknown
+python-sybase_ ``sybase+pysybase`` partial development no yes yes
========================= =========================== =========== =========== =========== ================= ============
.. _psycopg2: http://www.initd.org/
from sqlalchemy.types import CHAR, VARCHAR, TIME, NCHAR, NVARCHAR,\
TEXT,DATE,DATETIME, FLOAT, NUMERIC,\
BIGINT,INT, INTEGER, SMALLINT, BINARY,\
- VARBINARY, DECIMAL, TIMESTAMP, Unicode
+ VARBINARY, DECIMAL, TIMESTAMP, Unicode,\
+ UnicodeText
RESERVED_WORDS = set([
"add", "all", "alter", "and",
"within", "work", "writetext",
])
-
-class UNICHAR(sqltypes.Unicode):
+class _SybaseUnitypeMixin(object):
+ """these types appear to return a buffer object."""
+
+ def result_processor(self, dialect, coltype):
+ def process(value):
+ if value is not None:
+ return str(value) #.decode("ucs-2")
+ else:
+ return None
+ return process
+
+class UNICHAR(_SybaseUnitypeMixin, sqltypes.Unicode):
__visit_name__ = 'UNICHAR'
-class UNIVARCHAR(sqltypes.Unicode):
+class UNIVARCHAR(_SybaseUnitypeMixin, sqltypes.Unicode):
__visit_name__ = 'UNIVARCHAR'
-class UNITEXT(sqltypes.UnicodeText):
+class UNITEXT(_SybaseUnitypeMixin, sqltypes.UnicodeText):
__visit_name__ = 'UNITEXT'
class TINYINT(sqltypes.Integer):
def visit_boolean(self, type_):
return self.visit_BIT(type_)
+ def visit_unicode(self, type_):
+ return self.visit_NVARCHAR(type_)
+
def visit_UNICHAR(self, type_):
return "UNICHAR(%d)" % type_.length
+ def visit_UNIVARCHAR(self, type_):
+ return "UNIVARCHAR(%d)" % type_.length
+
def visit_UNITEXT(self, type_):
return "UNITEXT"