我为SQLAlchemy写了一个最小的数据库方言,它实际上并不属于核心。如何使其作为自己的Python包工作?
答案 0 :(得分:17)
从SQLAlchemy 0.8开始,您可以在进程中注册方言,而无需单独安装。
from sqlalchemy.dialects import registry
registry.register("mysql.foodialect", "myapp.dialect", "MyMySQLDialect")
以上内容将回复create_engine("mysql+foodialect://")
并从MyMySQLDialect
模块加载myapp.dialect
类。
请参阅:http://sqlalchemy.readthedocs.org/en/latest/core/connections.html#registering-new-dialects
答案 1 :(得分:14)
当SQLAlchemy解析数据库网址example://...
时,它会首先尝试在import sqlalchemy.dialects.example
中找到它。如果这不起作用,则会回退到pkg_resources.iter_entry_points('sqlachemy.databases')
。
使用setuptools
将新方言放入包中,包含以您的方言命名的入口点,运行python setup.py develop
或python setup.py install
,SQLAlchemy应该能够找到方言。< / p>
在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方言,定义数据库的关键字,并复制这些怪癖的实现(如{{1}从现有的方言中取代SELECT TOP 10
}。
答案 2 :(得分:-1)
至少在SQLAlchemy 5.x中你可以将你的驱动程序/方言放在数据库目录中,无论你的系统在哪里,(如果从源代码安装,它可能是/usr/local/lib/python2.7 /dist-packages/SQLAlchemy-0.5.8-py2.7.egg/sqlalchemy/databases)