Escribí un dialecto de base de datos mínimo para SQLAlchemy que realmente no pertenece al núcleo. ¿Cómo puedo hacer que funcione como su propio paquete de Python?¿Cómo escribo un dialecto externo para SQLAlchemy?
Respuesta
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 develop
python 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.
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)
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
funciona para mí. –
- 1. ¿Cómo generar un archivo con DDL en el dialecto SQL del motor en SQLAlchemy?
- 2. ¿Cómo escribo un representante para PyYAML?
- 3. ¿Cómo escribo un alias para grep -R?
- 4. ¿Cómo escribo un bucle for genérico para un Java Enum?
- 5. Función SQL personalizada para el dialecto NHibernate
- 6. Dialecto Hibernate para Oracle Database 11g?
- 7. Cómo integrar Redis con SQLAlchemy
- 8. Dialecto en Hibernate
- 9. ¿Cómo escribo un manejador de salida para una aplicación F #?
- 10. ¿Cómo escribo un servlet simple para Jetty usando Eclipse?
- 11. ¿Cómo escribo un deserializador JSON personalizado para Gson?
- 12. Cómo escribo un IThumbnailProvider en funcionamiento para Windows Vista
- 13. Rieles: ¿Cómo escribo las pruebas para un módulo Ruby?
- 14. ¿Cómo escribo un XSLT para transformar XML a CSV?
- 15. NHibernate: ¿Cómo resolver este problema "dialecto" configuración
- 16. ¿Cómo escribo un complemento de Firefox?
- 17. ¿Cómo escribo un cliente SSH simple?
- 18. ¿Cómo escribo en un archivo oculto?
- 19. ¿Cómo escribo en un OutputStream usando DefaultHttpClient?
- 20. ¿Cómo escribo un temporizador en Objective-C?
- 21. ¿Cómo escribo un breve literal en C++?
- 22. Cómo escribir un archivo de enlace externo para xjc?
- 23. ¿Cómo se puede utilizar HtmlHelper para crear un hipervínculo externo?
- 24. ¿Cómo configurar un número de revisión para svn externo?
- 25. CSS externo para JSF
- 26. ¿Cómo hacer un upsert con SqlAlchemy?
- 27. ¿Cómo escribo tareas? (código paralelo)
- 28. sqlalchemy existe para la consulta
- 29. org.hibernate.MappingException: No Dialecto mapeo para tipo JDBC: 1111
- 30. Configurando Django para usar SQLAlchemy
En SQLAlchemy 0,5 el punto de entrada se llama sqlalchemy.databases –