2009-11-04 28 views

回答

12

SQLAlchemy解決了數據庫網址example://...它首先會嘗試在import sqlalchemy.dialects.example中找到它。如果這不起作用,它會回落到pkg_resources.iter_entry_points('sqlachemy.databases')

將新方言放入包中,使用setuptools,包括以您的方言命名的入口點,運行python setup.py developpython 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)group產生pkg_resources.EntryPoint實例。撥打EntryPointentrypoint.name='example'撥打電話​​,即可獲得example_sa.base.dialect

我很驚喜於爲SQLAlchemy 0.6編寫新的方言是多麼容易。如果您的數據庫與標準SQL相比只有一些怪癖,那麼您很可能會繼承標準(類似MySQL的)SQL方言,定義數據庫的關鍵字並複製這些怪癖的實現(如SELECT TOP 10而不是SELECT ... LIMIT 10 )從現有的方言。

+1

在SQLAlchemy中0.5的入口點sqlalchemy.databases – 2010-01-07 16:08:56

0

至少在SQLAlchemy 5.x中,您可以將驅動程序/方言放在數據庫目錄中,無論系統在何處(如果從源代碼安裝,它可能是/ usr/local/lib/python2。 7/dist-packages/SQLAlchemy-0.5.8-py2.7.egg/sqlalchemy/databases)

16

從SQLAlchemy 0.8開始,您可以在進程中註冊方言而無需單獨安裝。

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

上面將要響應create_engine("mysql+foodialect://")並從myapp.dialect模塊加載MyMySQLDialect類。

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

+0

它爲我工作。 – 2013-01-10 12:00:20