Définir une colonne varbinary (max) en utilisant sqlalchemy sur MS SQL Server

J'interroge une database SQL Server à l'aide de SQLAlchemy et j'ai besoin de convertir une colonne en varbinary (max). La chose avec laquelle je me bats est la partie "max". Je peux get le cast pour n'importe quel nombre réel (par exemple varbinary (20)), mais je ne peux pas find comment le faire fonctionner pour la taille "max" de la colonne varbinary.

Des pointeurs? Liens? Solutions?

Cordialement, Mark

J'espère que vous avez tous remarqué que nous avons pratiquement cette recette exacte dans la documentation principale pour la compilation personnalisée, sans aucun monkeypatching, ici:

http://www.sqlalchemy.org/docs/reference/ext/comstackr.html?highlight=comstackr#changing-compilation-of-types

 @comstacks(Ssortingng, 'mssql') @comstacks(VARCHAR, 'mssql') def comstack_varchar(element, comstackr, **kw): if element.length == 'max': return "VARCHAR('max')" else: return comstackr.visit_VARCHAR(element, **kw) foo = Table('foo', metadata, Column('data', VARCHAR('max')) ) 

SQLAlchemy ne supporte pas ce hors de la boîte (créer une request de fonctionnalité sur sqlalchemy trac ).

Pour le faire fonctionner, hackez-le: ajoutez la méthode suivante à la class sqlalchemy\dialects\mssql\base.py dans sqlalchemy\dialects\mssql\base.py :

 def visit_VARBINARY(self, type_): if type_.length == 'MAX': return "VARBINARY(MAX)" else: return "VARBINARY(%d)" % type_.length 

puis utilisez la requête avec le type MSVarBinary :

 from sqlalchemy.dialects.mssql.base import MSVarBinary ... q = ... cast(mytable.c.mycolumn, MSVarBinary('MAX')) ...