query - ¿Cómo escribo un dialecto externo para SQLAlchemy?
sqlalchemy query (3)
A partir de SQLAlchemy 0.8, puede registrar los dialectos en proceso sin necesidad de tener una instalación por separado.
from sqlalchemy.dialects import registry
registry.register("mysql.foodialect", "myapp.dialect", "MyMySQLDialect")
Lo anterior responderá a create_engine("mysql+foodialect://")
y cargará la clase MyMySQLDialect
desde el módulo myapp.dialect
.
Consulte: http://sqlalchemy.readthedocs.org/en/latest/core/connections.html#registering-new-dialects
Escribí un dialecto de base de datos mínimo para SQLAlchemy que realmente no pertenece al núcleo. ¿Cómo lo hago funcionar como su propio paquete de Python?
Al menos en SQLAlchemy 5.x puede simplemente colocar su controlador / dialecto en el directorio de bases de datos, donde sea que esté en su sistema, (si lo instaló desde la fuente, podría ser /usr/local/lib/python2.7/dist- paquetes / SQLAlchemy-0.5.8-py2.7.egg / sqlalchemy / bases de datos)
Cuando SQLAlchemy resuelve un example://...
url de base de datos example://...
primero intentará encontrarlo en import sqlalchemy.dialects.example
. Si eso no funciona, vuelve a pkg_resources.iter_entry_points(''sqlachemy.databases'')
.
Coloque el nuevo dialecto en un paquete usando setuptools
, incluya un punto de entrada con el nombre de su dialecto, ejecute python setup.py develop
o python setup.py install
, y SQLAlchemy debería poder encontrar el dialecto.
En setup.py
:
entry_points = {
''sqlalchemy.databases'': [''example = example_sa:base.dialect'',]
},
example_sa:base.dialect
significa import example_sa; return example_sa.base.dialect
import example_sa; return example_sa.base.dialect
.
Después de instalar este paquete, pkg_resources.iter_entry_points(group)
genera instancias de pkg_resources.EntryPoint
del group
. Llame a .load()
en EntryPoint
con entrypoint.name=''example''
y obtendrá example_sa.base.dialect
.
Me sorprendió gratamente lo fácil que es escribir nuevos dialectos para SQLAlchemy 0.6. Si su base de datos tiene solo unas pocas peculiaridades en comparación con el estándar de SQL, es posible que pueda heredar del dialecto de SQL estándar (similar a MySQL), definir las palabras clave de su base de datos y copiar la implementación de esas peculiaridades (como SELECT TOP 10
lugar). de SELECT ... LIMIT 10
) de un dialecto existente.