from sqlalchemy.engine import create_engine from sqlalchemy.ext.declarative.api import declarative_base from sqlalchemy import Column, types from sqlalchemy.sql import text from sqlalchemy.sql.sqltypes import BINARY from sqlalchemy_utils import UUIDType from sqlalchemy.orm import sessionmaker from uuid import UUID from traceback import print_exc Model = declarative_base() class MyModel(Model): __tablename__ = "some_table" id = Column(types.Integer, primary_key=True) uuid = Column(UUIDType()) other_uuid = Column(types.BINARY(16)) # other_uuid = Column(types.String(50)) db = create_engine("mysql+mysqlconnector://root:password@192.168.49.2:31541/example?use_pure=True") Session = sessionmaker(bind=db) Model.metadata.drop_all(db) Model.metadata.create_all(db) uuid1 = UUID("2F297F074D055ADC9903354816756976") m1 = MyModel(uuid=uuid1, other_uuid=bytearray(uuid1.bytes)) uuid2 = UUID('4dbb4625-6395-44ff-88cf-d16bacc021e3') m2 = MyModel(uuid=uuid2, other_uuid=bytearray(uuid2.bytes)) session = Session() session.add(m1) session.add(m2) session.commit() # All good until then result = db.execute(text("SELECT * from some_table")) first = next(result) # this is fine, but instead of a bytearray, the UUID is returned as a string second = next(result) # this is also fine, shows UUID as a bytearray print(first) print(second) first_object = session.query(MyModel).filter(MyModel.id == 1).first() # this one fails with a TypeError second_object = session.query(MyModel).filter(MyModel.id == 2).first() # this one is perfectly fine