【问题标题】:SQL-alchemy: ValueError too many values to unpack?SQL-alchemy:ValueError 太多值无法解包?
【发布时间】:2018-07-01 14:14:24
【问题描述】:

我有一个使用 sql-alchemy 包的 mysql 数据库运行的网站,该包突然损坏。我做了一些研究,发现预期的问题是最新的 sql-alchemy 更新给 flask-admin 带来的价值比预期的多一个

"cls, key = identity_key(instance=obj)"


Source

建议的解决方法是编辑文件以接受第三项,但我无法使用我对环境的权限执行此操作。

另一个答案链接到 github 上的 repo,但我不知道这对我有什么帮助。我对此很陌生,我不知道我是否应该克隆 repo,或者如果我这样做了,该怎么做。

感谢任何帮助!

这是错误转储

2018-01-22 20:01:59,593:[2018-01-22 20:01:59,592] 应用程序中的错误: /reservation/add [GET] 的例外情况
2018-01-22 20:01:59,594: 回溯(最近一次通话最后):
2018-01-22 20:01:59,594:
文件“fakepath/flask/app.py”,第 1982 行,在 wsgi_app
2018-01-22 20:01:59,594:响应 = self.full_dispatch_request()2018-01-22 20:01:59,594:文件“fakepath/flask/app.py”,第 1614 行, 在 full_dispatch_request
2018-01-22 20:01:59,594: rv = self.handle_user_exception(e)
2018-01-22 20:01:59,595:文件 “fakepath/flask/app.py”,第 1517 行,在 handle_user_exception2018-01-22 20:01:59,595:reraise(exc_type,exc_value,tb)2018-01-22 20:01:59,595:文件“fakepath/flask/ _compat.py",行 33,在重新筹集
2018-01-22 20:01:59,595:提高价值2018-01-22 20:01:59,595:文件“fakepath/flask/app.py”,第 1612 行, 在 full_dispatch_request
2018-01-22 20:01:59,595: rv = self.dispatch_request()
2018-01-22 20:01:59,596:文件 “fakepath/flask/app.py”,第 1598 行,在 dispatch_request2018-01-22 20:01:59,596 中:返回 self.view_functionsrule.endpoint
2018-01-22 20:01:59,596:文件“fakepath/flask_login/utils.py”,第 261 行,在 装饰视图
2018-01-22 20:01:59,596: 返回 func(*args, **kwargs)
2018-01-22 20:01:59,597:文件“/home/apoalphagammawebmaster/inventory/app/auth/views.py”,第 248 行, 在 add_reservation
2018-01-22 20:01:59,597: form=form, title='添加预订')
2018-01-22 20:01:59,597: 文件 “fakepath/flask/template.py”,第 134 行,在 render_template2018-01-22 20:01:59,597:上下文,ctx.app)
2018-01-22 20:01:59,597:文件“fakepath/flask/template.py”,第 116 行,在 _render
2018-01-22 20:01:59,597:rv = template.render(context)
2018-01-22 20:01:59,598:文件 “fakepath/jinja2/asyncsupport.py”,第 76 行,在渲染中
2018-01-22 20:01:59,598: 返回 original_render(self, *args, **kwargs)2018-01-22 20:01:59,598: 文件“fakepath/jinja2/environment.py”, 第 1008 行,在渲染中
2018-01-22 20:01:59,598:返回 self.environment.handle_exception(exc_info, True)
2018-01-22 20:01:59,598:文件“fakepath/jinja2/environment.py”,第 780 行,在 句柄异常
2018-01-22 20:01:59,599: reraise(exc_type, exc_value,待定)
2018-01-22 20:01:59,599:文件 “fakepath/jinja2/_compat.py”,第 37 行,重新筹集
2018-01-22 20:01:59,599:提高价值。with_traceback(tb)
2018-01-22 20:01:59,599:文件 "/home/apoalphagammawebmaster/inventory/app/templates/auth/reservations/reservation.html", 第 2 行,在顶级模板代码中
2018-01-22 20:01:59,599:
{% 扩展“base.html”%}
2018-01-22 20:01:59,599:文件 “/home/apoalphagammawebmaster/inventory/app/templates/base.html”,行 48、在顶层模板代码中
2018-01-22 20:01:59,600: {% 块体 %}
2018-01-22 20:01:59,600:文件 "/home/apoalphagammawebmaster/inventory/app/templates/auth/reservations/reservation.html", 第 27 行,在“正文”块中
2018-01-22 20:01:59,600: {{ wtf.quick_form(form) }}
2018-01-22 20:01:59,600:文件 “fakepath/jinja2/runtime.py”,第 579 行,在 _invoke
2018-01-22 20:01:59,600: rv = self._func(*arguments)
2018-01-22 20:01:59,601:文件 “fakepath/flask_bootstrap/templates/bootstrap/wtf.html”,第 205 行,在 模板
2018-01-22 20:01:59,601: {{ form_field(field,2018-01-22 20:01:59,601: 文件“fakepath/jinja2/runtime.py”,行 579,在 _invoke
2018-01-22 20:01:59,601: rv = self._func(*arguments)
2018-01-22 20:01:59,601:文件 “fakepath/flask_bootstrap/templates/bootstrap/wtf.html”,第 123 行,在 模板
2018-01-22 20:01:59,601:
{{field(class="form-control", **kwargs)|safe}}
2018-01-22 20:01:59,601:文件“fakepath/wtforms/fields/core.py”,第 153 行,在 调用
2018-01-22 20:01:59,601:返回 self.meta.render_field(self, kwargs)
2018-01-22 20:01:59,602:
文件“fakepath/wtforms/meta.py”,第 56 行,在 render_field2018-01-22 20:01:59,602 中:return field.widget(field, **render_kw)
2018-01-22 20:01:59,602:文件“fakepath/wtforms/widgets/core.py”,第 287 行,在 call2018-01-22 20 中: 01:59,602:对于 val、标签,在 field.iter_choices():
2018-01-22 20:01:59,602:文件 “fakepath/wtforms/ext/sqlalchemy/fields.py”,第 107 行,在 iter_choices
2018-01-22 20:01:59,602:对于 pk,obj in self._get_object_list():
2018-01-22 20:01:59,602:文件 “fakepath/wtforms/ext/sqlalchemy/fields.py”,第 100 行,在 _get_object_list
2018-01-22 20:01:59,602: self._object_list = list((text_type(get_pk(obj)), obj) 用于查询中的 obj)
2018-01-22 20:01:59,603:文件“fakepath/wtforms/ext/sqlalchemy/fields.py”,行 100,在
2018-01-22 20:01:59,603: self._object_list = list((text_type(get_pk(obj)), obj) for obj in query)
2018-01-22 20:01:59,603:文件“fakepath/wtforms/ext/sqlalchemy/fields.py”,行 189, 在 get_pk_from_identity
2018-01-22 20:01:59,603: cls, key = identity_key(instance=obj)
2018-01-22 20:01:59,603: ValueError:要解压的值太多(预期为 2)

【问题讨论】:

    标签: python mysql sqlalchemy flask-sqlalchemy sqlalchemy-migrate


    【解决方案1】:

    这个问题在 github 问题线程 - https://github.com/flask-admin/flask-admin/issues/1588

    关于最新的sqlalchemy pip 包,基本上,flask-admin pip 包已经过时了。在那个特定区域,

    cls, key = identity_key(instance=obj)
    

    sqlalchemy 现在返回 3 个对象,但 flask-admin 只期望 2 个,因此出现错误。

    真正的解决方案是等到新的flask-admin 版本上传到 pip,在此之前,您有几个选择。

    1. 手动进入并编辑 fields.py 文件
    2. 如该问题线程中所述,将sqlalchemy 限制为版本1.2.0b3。您可以在您的 requirements.txt 文件中执行此操作,或者使用 pip 升级安装手动执行此操作,pip install --upgrade sqlalchemy==1.2.0b3
    3. 由于修复位于其 github 存储库中的 flask-admin 的 master 分支中,因此请安装该版本的 flask-admin 并使用 git+https://github.com/flask-admin/flask-admin 的 pip 位置。同样,您可以在 requirements.txt 文件中执行此操作,或者使用 pip 升级安装,pip install --upgrade git+https://github.com/flask-admin/flask-admin

    我个人的偏好,以及我所做的,是选项 3。如果您查看代码本身,无论如何,这是维护人员想要删除的一行,并且他们处理它的方式更好,并且在总的来说,我更喜欢继续前进(flask-admin 的最新版本)而不是推迟(将sqlalchemy 回滚到以前的版本),当然比手动编辑原始代码要好。

    【讨论】:

    • 干得好!不明白为什么这个答案还没有被接受。
    【解决方案2】:

    我也遇到了这个问题。我得到了黑客(如上所述)的工作,但看看https://github.com/wtforms/wtforms/issues/373https://github.com/flask-admin/flask-admin/issues/1588 上的讨论,似乎对 wtforms_sqlalchemy 的支持不如 wtforms_alchemy。

    所以,我安装了 wtforms_alchemy

    pip install wtforms_alchemy 
    

    并在我的项目中将 wtforms_sqlalchemy 替换为 wtform_alchemy

    from wtforms_alchemy.fields import QuerySelectField 
    

    我的项目也一样。

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多