2009-11-04 2 views

Antwort

12

Wenn SQLAlchemy eine Datenbank-URL example://... auflöst, versucht es zuerst, sie in import sqlalchemy.dialects.example zu finden. Wenn das nicht funktioniert, fällt es zurück auf pkg_resources.iter_entry_points('sqlachemy.databases').

Setzen Sie den neuen Dialekt in einem Paket mit setuptools, umfasst einen Eintrittspunkt nach dem Dialekt genannt, python setup.py develop oder python setup.py install laufen und SQLAlchemy sollte den Dialekt der Lage zu finden.

In setup.py:

entry_points = { 
    'sqlalchemy.databases': ['example = example_sa:base.dialect',] 
    }, 

example_sa:base.dialect bedeutet import example_sa; return example_sa.base.dialect.

Nach der Installation dieses Pakets liefert pkg_resources.iter_entry_points(group)pkg_resources.EntryPoint Instanzen von group. Rufen Sie .load() auf der EntryPoint mit entrypoint.name='example' und Sie erhalten example_sa.base.dialect.

Ich war angenehm überrascht, wie einfach es ist, neue Dialekte für SQLAlchemy 0.6 zu schreiben. Wenn Ihre Datenbank im Vergleich zu Standard-SQL nur ein paar Macken hat, können Sie wahrscheinlich den SQL-Standard (MySQL-ähnlich) erben, die Schlüsselwörter Ihrer Datenbank definieren und die Implementierung dieser Macken kopieren (wie anstelle von SELECT ... LIMIT 10)) aus einem bestehenden Dialekt.

+1

In SQLAlchemy 0.5 der Einstiegspunkt wird sqlalchemy.databases genannt –

0

Zumindest in SQLAlchemy 5.x können Sie einfach Ihren Treiber/Dialekt im Datenbankverzeichnis ablegen, egal wo auf Ihrem System, (wenn Sie von der Quelle installiert haben, könnte es/usr/local/lib/python2 sein. 7/dist-packages/SQLAlchemy-0.5.8-py2.7.egg/sqlalchemy/databases)

16

Ab SQLAlchemy 0.8 können Sie die Dialekte im Prozess registrieren, ohne dass Sie eine separate Installation benötigen.

from sqlalchemy.dialects import registry 
registry.register("mysql.foodialect", "myapp.dialect", "MyMySQLDialect") 

Die oben wird die MyMySQLDialect Klasse aus dem myapp.dialect Modul create_engine("mysql+foodialect://") und laden antworten.

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

+0

es für mich funktioniert. –