2009-11-04 12 views

Respuesta

12

Cuando SQLAlchemy resuelve una url de base de datos example://... primero intentará encontrarlo en import sqlalchemy.dialects.example. Si eso no funciona, vuelve a caer en pkg_resources.iter_entry_points('sqlachemy.databases').

poner el nuevo dialecto en un paquete usando setuptools, incluir un punto de entrada el nombre de su dialecto, correr o python setup.py developpython setup.py install y SQLAlchemy debería ser capaz de 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.

Después de instalar este paquete, pkg_resources.iter_entry_points(group) produce pkg_resources.EntryPoint instancias desde group. Llame al .load() en el 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 algunas peculiaridades en comparación con SQL estándar, es probable que pueda heredar del dialecto SQL estándar (tipo MySQL), defina las palabras clave de su base de datos y copie la implementación de esas peculiaridades (como SELECT TOP 10 en lugar de SELECT ... LIMIT 10) de un dialecto existente.

+1

En SQLAlchemy 0,5 el punto de entrada se llama sqlalchemy.databases –

0

Al menos en SQLAlchemy 5.x puede simplemente colocar su controlador/dialecto en el directorio de las 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-packages/SQLAlchemy-0.5.8-py2.7.egg/sqlalchemy/databases)

16

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 del módulo myapp.dialect.

Ver: http://sqlalchemy.readthedocs.org/en/latest/core/connections.html#registering-new-dialects

+0

funciona para mí. –

Cuestiones relacionadas