我爲SQLAlchemy寫了一個最小的數據庫方言,它並不屬於核心。我如何使它作爲自己的Python包工作?如何爲SQLAlchemy編寫外部方言?
回答
當SQLAlchemy解決了數據庫網址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)
從group
產生pkg_resources.EntryPoint
實例。撥打EntryPoint
與entrypoint.name='example'
撥打電話,即可獲得example_sa.base.dialect
。
我很驚喜於爲SQLAlchemy 0.6編寫新的方言是多麼容易。如果您的數據庫與標準SQL相比只有一些怪癖,那麼您很可能會繼承標準(類似MySQL的)SQL方言,定義數據庫的關鍵字並複製這些怪癖的實現(如SELECT TOP 10
而不是SELECT ... LIMIT 10
)從現有的方言。
至少在SQLAlchemy 5.x中,您可以將驅動程序/方言放在數據庫目錄中,無論系統在何處(如果從源代碼安裝,它可能是/ usr/local/lib/python2。 7/dist-packages/SQLAlchemy-0.5.8-py2.7.egg/sqlalchemy/databases)
從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
它爲我工作。 – 2013-01-10 12:00:20
- 1. 如何使用DELPHI中用C語言編寫的外部DLL
- 2. 如何編寫自定義nHibernate方言?
- 3. 如何爲該語言的某種語言編寫編譯器?
- 4. 如何編寫外部SD卡(mnt/external1)
- 5. Sqlalchemy:如何執行外部連接?
- 6. 如何用sqlalchemy編寫幫助類
- 7. 如何用flask-sqlalchemy編寫doctests?
- 8. 如何爲xjc編寫外部綁定文件?
- 9. 如何爲例外編寫Junit
- 10. 如何用匯編語言編寫
- 11. 寫編程語言:如何編譯
- 12. 如何爲Sqlalchemy中的各種模型編寫通用的get_by_id()方法?
- 13. 如何在PyCharm中爲SQLAlchemy配置外部文檔?
- 14. 如何使用SQLAlchemy的表達式語言編寫條件語句?
- 15. 用SQLAlchemy編寫的Enthought Traits
- 16. 如何使用Ruby + Regex編寫內部自然語言DSL?
- 17. 如何爲異步復位行爲編寫斷言
- 18. 如何爲gRPC++編寫yocto配方?
- 19. 如何爲所有類編寫方法
- 20. 如何爲ArrayList編寫toString方法?
- 21. 如何定位外部留言箱?
- 22. 如何使用Apache編寫php語言
- 23. 如何編寫自定義斷言Python
- 24. 如何編寫和不同的語言
- 25. 如何編寫自定義斷言?
- 26. 如何用Python語言編寫
- 27. 寫lisp方言
- 28. 如何編寫識別以下語言的單詞的方法
- 29. 如何在testet方法中用斷言編寫單元測試?
- 30. 如何編寫自定義PHPUnit斷言,其行爲如同內置斷言?
在SQLAlchemy中0.5的入口點sqlalchemy.databases – 2010-01-07 16:08:56