我为SQLAlchemy写了一个最小的数据库方言,它实际上并不属于核心.如何使其作为自己的Python包工作?
Sea*_*nch 18
从SQLAlchemy 0.8开始,您可以在进程中注册方言,而无需单独安装.
from sqlalchemy.dialects import registry
registry.register("mysql.foodialect", "myapp.dialect", "MyMySQLDialect")
Run Code Online (Sandbox Code Playgroud)
以上将响应 create_engine("mysql+foodialect://")
并加载 模块中的 MyMySQLDialect
类 myapp.dialect
.
请参阅:http://sqlalchemy.readthedocs.org/en/latest/core/connections.html#registering-new-dialects
joe*_*ker 15
当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',]
},
Run Code Online (Sandbox Code Playgroud)
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
)现有的方言.
归档时间: |
|
查看次数: |
4092 次 |
最近记录: |