Универсальный текстовый/тип данных CLOB для кросс-базы данных приложения с SQLAlchemy
Я работаю над веб-приложением Python, которое использует MySQL в качестве бэкенда базы данных в среде разработки и Oracle 11g в производственной среде. Существует ли конкретный способ унифицировать текстовые поля SQLAlchemy, чтобы они работали как на MySQL, так и на Oracle database? Для бэкенда Oracle в моделях я использую sqlalchemy.CLOB и для MySQL sqlalchemy.TEXT.
2 ответов:
Согласно @agronholm на #sqlalchemy предполагается использовать универсальный тип SQLAlchemy
Text(которыйTEXTявляется специализацией):Переменный тип строки.
В SQL обычно соответствует CLOB или тексту. Можно также взять Python объекты unicode и кодирование в кодировку базы данных в bind params (и наоборот для наборов результатов.) В общем случае текстовые объекты не имеют иметь длину; в то время как некоторые базы данных будут принимать аргумент длины вот, так и будет будьте отвергнуты другими.
Я думаю, что с помощью этой официальной документации трюк должен сделать трюк: Overiding Type Compilation. В этом случае я бы сохранил
CLOBкак оригинал, потому что он используется в производстве, и применил бы компиляцию дляmysql:from sqlalchemy.ext.compiler import compiles from sqlalchemy.types import CLOB @compiles(CLOB, "mysql") def compile_binary_mysql(type_, compiler, **kw): return "TEXT" # @note: this will handle other parameter such as `length` # return compiler.visit_TEXT(type_, **kw)обратите внимание, что настоятельно рекомендуется использовать одни и те же СУБД для производства/тестирования/разработки, чтобы избежать этих и других проблем.
Comments