Ответ 1
Когда SQLAlchemy разрешает URL-адрес базы данных example://...
, сначала попытается найти его в import sqlalchemy.dialects.example
. Если это не работает, оно возвращается к pkg_resources.iter_entry_points('sqlachemy.databases')
.
Поместите новый диалект в пакет с помощью setuptools
, включите точку входа, названную после вашего диалекта, запустите python setup.py develop
или python setup.py install
, а SQLAlchemy должен найти диалект.
В setup.py
:
entry_points = {
'sqlalchemy.databases': ['example = example_sa:base.dialect',]
},
example_sa:base.dialect
означает import example_sa; return example_sa.base.dialect
.
После установки этого пакета pkg_resources.iter_entry_points(group)
выводит pkg_resources.EntryPoint
экземпляры из group
. Вызовите .load()
на EntryPoint
с помощью entrypoint.name='example'
, и вы получите example_sa.base.dialect
.
Я был приятно удивлен, насколько легко писать новые диалекты для SQLAlchemy 0.6. Если у вашей базы данных всего несколько причуд по сравнению со стандартным SQL, скорее всего, вы сможете наследовать от стандартного (MySQL-подобного) SQL-диалекта, определить ключевые слова базы данных и скопировать реализацию этих причуд (например, SELECT TOP 10
вместо из SELECT ... LIMIT 10
) из существующего диалекта.