我为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 次 |
| 最近记录: |