the bytearray() is a new type that was only introduced in Python 2.6, and this behavior is specific to pyodbc. psycopg2 for example returns a value called a “memoryview”, cx_oracle returns a special LOB type.
Binary types in Python are typically plain strings (e.g. str), in Python 3 this type is called “bytes”. The Binary types in SQLAlchemy standardize the return of bytes to be bytestring/bytes for all backends, converting from the various arbitrary objects the DBAPIs specify (as the DBAPI spec itself says nothing about Python types). The sqlite3 driver that’s included with Python uses this convention as well for binary types.
if you want the raw pyodbc behavior, quickest route is to just use NullType instead of BLOB for your type, or subclass UserDefinedType or BLOB if you still need some of the type-specific behaviors other than result conversion.