我有一个带有pas.plugins.sqlalchemy的扩展实例。它出现在安装列表中,但是在安装时会导致错误。
这是ZCML定义:
<configure xmlns="http://namespaces.zope.org/zope" xmlns:db="http://namespaces.zope.org/db"> <include package="z3c.saconfig" file="meta.zcml" /> <db:engine xmlns="http://namespaces.zope.org/db" name="pas" url="mysql://webadmin:password@rcs-mysql-dev/estep" /> <db:session xmlns="http://namespaces.zope.org/db" name="pas.plugins.sqlalchemy" engine="pas" /> </configure>
追溯为:
Traceback (innermost last): Module ZPublisher.Publish, line 127, in publish Module ZPublisher.mapply, line 77, in mapply Module ZPublisher.Publish, line 47, in call_object Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 575, in installProducts Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 512, in installProduct - __traceback_info__: ('pas.plugins.sqlalchemy',) Module Products.GenericSetup.tool, line 330, in runAllImportStepsFromProfile - __traceback_info__: profile-pas.plugins.sqlalchemy:install Module Products.GenericSetup.tool, line 1085, in _runImportStepsFromContext Module Products.GenericSetup.tool, line 999, in _doRunImportStep - __traceback_info__: pas.plugins.sqlalchemy.install Module pas.plugins.sqlalchemy.setuphandlers, line 46, in install Module sqlalchemy.schema, line 2148, in create_all Module sqlalchemy.engine.base, line 1698, in create Module sqlalchemy.engine.base, line 1740, in _run_visitor Module sqlalchemy.sql.visitors, line 83, in traverse_single Module sqlalchemy.engine.ddl, line 42, in visit_metadata Module sqlalchemy.sql.visitors, line 83, in traverse_single Module sqlalchemy.engine.ddl, line 58, in visit_table Module sqlalchemy.engine.base, line 1191, in execute Module sqlalchemy.engine.base, line 1241, in _execute_ddl Module sqlalchemy.sql.expression, line 1413, in compile Module sqlalchemy.engine.base, line 702, in compile Module sqlalchemy.engine.base, line 715, in process Module sqlalchemy.sql.visitors, line 54, in _compiler_dispatch Module sqlalchemy.sql.compiler, line 1152, in visit_create_table Module sqlalchemy.dialects.mysql.base, line 1282, in get_column_specification Module sqlalchemy.engine.base, line 761, in process Module sqlalchemy.sql.visitors, line 54, in _compiler_dispatch Module sqlalchemy.sql.compiler, line 1450, in visit_string Module sqlalchemy.dialects.mysql.base, line 1520, in visit_VARCHAR InvalidRequestError: VARCHAR requires a length when rendered on MySQL
我没有安装MySQL,并且pas.plugins.sqlalchemy对我来说在postgresql上运行良好,但是作者似乎对varchars作了假设。假设这不是SQLAlchemy应该自己处理的事情(如果SQLalchemy的MySQL方言可以为无限制的varchars选择合适的最大大小,那将是非常不错的选择),我将看看我是否可以在今天晚上进行修复。
快速浏览一下代码显示,所有“字符串”(数据库将其视为varchar)字段的最大长度除外,除了 User* 表中的 Login , 名称 和 密码 以及 Group 表中的 名称之外 ,没有充分的理由说明为什么不同的。 __ ***
更新 :从Subversion中检出https://svn.plone.org/svn/collective/PASPlugins/pas.plugins.sqlalchemy/branches/auspex。这是我的pas.plugins.sqlalchemy版本,支持IGroupCapability接口(允许将用户添加到也存储在rdb中的组中或从中删除),并且还为所有无限制的String字段添加了长度。
如果您不知道如何在构建中使用Subversion检出,请参见:http : //pypi.python.org/pypi/mr.developer/