删除未使用的SQLAlchemy方言和测试?

时间:2018-11-11 01:26:20

标签: python sqlalchemy

除其他事项外,我正在打包SQLAlchemy以便部署到AWS Lambda上,并希望减少压缩后的项目档案的大小。我在sqlalchemy/dialects中看到有SQLAlchemy支持的SQL方言列表:

48K ./firebird
48K ./sybase
88K ./sqlite
112K    ./oracle
124K    ./mssql
204K    ./mysql
240K    ./postgresql 

删除该项目不使用的方言是否有任何问题?如果仅使用MySQL,则肯定不需要sqlite方言定义。

或者删除sqlalchemy/testing下的测试:

12K ./testing/engines.py
12K ./testing/fixtures.py
12K ./testing/profiling.py
16K ./testing/assertsql.py
16K ./testing/exclusions.py
16K ./testing/provision.py
20K ./testing/assertions.py
28K ./testing/requirements.py
36K ./testing/plugin
136K    ./testing/suite

1 个答案:

答案 0 :(得分:1)

我做了一个search for the word "dialects" in the SQLAlchemy github repo,而引人注意的主要模块是SQLAlchemy.databases.__init__.py

from ..dialects.sqlite import base as sqlite
from ..dialects.postgresql import base as postgresql
postgres = postgresql
from ..dialects.mysql import base as mysql
from ..dialects.oracle import base as oracle
from ..dialects.firebird import base as firebird
from ..dialects.mssql import base as mssql
from ..dialects.sybase import base as sybase


__all__ = (
    'firebird',
    'mssql',
    'mysql',
    'postgresql',
    'sqlite',
    'oracle',
    'sybase',
)

我更改为:

from ..dialects.mysql import base as mysql


__all__ = (
    'mysql',
)

我还修改了__all__中的sqlalchemy.dialects.__init__.py声明。这个:

__all__ = (
    'firebird',
    'mssql',
    'mysql',
    'oracle',
    'postgresql',
    'sqlite',
    'sybase',
)

收件人:

__all__ = (
    'mysql'
)

我实际上不知道是否需要修改这些__all__声明。我没有进行测试就没有测试。

然后,我删除了sqlalchemy.dialects.*以外的所有mysql子目录,并且能够无例外地运行几个我坐着的MySQL CRUD应用程序。

也删除sqlalchemy.testing文件夹不会造成任何问题。

我尝试运行sqllite应用并获得sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:sqlite

因此,似乎只需要修改一个或两个文件,只要在遗留的方言上运行,就可以摆脱它。

主要是,删除方言后,您的应用程序的所有测试都通过了(假设您的测试覆盖面很好),因为我仅在一组非常有限的小型ORM应用程序中进行了测试。