sqlalchemy:类型错误:创建实例的不可散列类型,sqlalchemy

2023-12-20

我在尝试更新代码时遇到错误:https://github.com/thrisp/flask-security https://github.com/thrisp/flask-security从Python 2.7到3.3

给出以下最基本的实例

test.py:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.security import Security, UserMixin, RoleMixin, \
     SQLAlchemyUserDatastore

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'

db = SQLAlchemy(app)
db.drop_all()

roles_users = db.Table('roles_users',
        db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
        db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))

class Role(db.Model, RoleMixin):
        id = db.Column(db.Integer(), primary_key=True)
        name = db.Column(db.String(80), unique=True)
        description = db.Column(db.String(255))

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    last_login_at = db.Column(db.DateTime())
    current_login_at = db.Column(db.DateTime())
    last_login_ip = db.Column(db.String(100))
    current_login_ip = db.Column(db.String(100))
    login_count = db.Column(db.Integer)
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))


db.create_all()
app.security = Security(app, datastore=SQLAlchemyUserDatastore(db, User, Role))
ds = app.extensions['security'].datastore

def create_roles():
    for role in ('admin', 'editor', 'author'):
        ds.create_role(name=role)
    ds.commit()

create_roles()

def create_users(count=None):
    users = [('[email protected] /cdn-cgi/l/email-protection', 'password', ['admin'], True),
             ('[email protected] /cdn-cgi/l/email-protection', 'password', ['editor'], True),
             ('[email protected] /cdn-cgi/l/email-protection', 'password', ['admin', 'editor'], True),
             ('[email protected] /cdn-cgi/l/email-protection', 'password', ['author'], True),
             ('[email protected] /cdn-cgi/l/email-protection', 'password', [], False)]
    count = count or len(users)

    for u in users[:count]:
        pw = u[1]
        ds.create_user(email=u[0], password=pw,
                       roles=u[2], active=u[3])
    ds.commit()

create_users(1)

结果出现错误:

Traceback (most recent call last):
File "test.py", line 62, in <module>
create_users(1)
File "test.py", line 59, in create_users
roles=u[2], active=u[3])
File "/media/lxch/686e26f8-c6d4-4448-8fe4-c19802726dcb/projects/current/public/flask-security/flask_security/datastore.py", line 164, in create_user
user = self.user_model(**self._prepare_create_user_args(**kwargs))
File "<string>", line 4, in __init__
File "/home/lxch/.virtualenvs/p3/lib/python3.3/site-packages/sqlalchemy/orm/state.py", line 200, in _initialize_instance
return manager.original_init(*mixed[1:], **kwargs)
File "/home/lxch/.virtualenvs/p3/lib/python3.3/site-packages/sqlalchemy/ext/declarative/base.py", line 425, in _declarative_constructor
setattr(self, k, kwargs[k])
File "/home/lxch/.virtualenvs/p3/lib/python3.3/site-packages/sqlalchemy/orm/attributes.py", line 303, in __set__
instance_dict(instance), value, None)
File "/home/lxch/.virtualenvs/p3/lib/python3.3/site-packages/sqlalchemy/orm/attributes.py", line 1001, in set
lambda adapter, i: adapter.adapt_like_to_iterable(i))
File "/home/lxch/.virtualenvs/p3/lib/python3.3/site-packages/sqlalchemy/orm/attributes.py", line 1036, in _set_iterable
collections.bulk_replace(new_values, old_collection, new_collection)
File "/home/lxch/.virtualenvs/p3/lib/python3.3/site-packages/sqlalchemy/orm/collections.py", line 803, in bulk_replace
constants = existing_idset.intersection(values or ())
File "/home/lxch/.virtualenvs/p3/lib/python3.3/site-packages/sqlalchemy/util/_collections.py", line 558, in intersection
result._members.update(self._working_set(members).intersection(other))
TypeError: unhashable type: 'Role'

我正在努力理解为什么以及到底是什么:

类型错误:不可散列的类型:“角色”

任何见解表示赞赏。


这里讨论了类似的问题:修改 SqlAlchemy 模型时出现 Unhashable 类型错误 https://stackoverflow.com/questions/21315633/unhashable-type-error-when-modifying-sqlalchemy-models

一个解决方案(或至少是解决方法)是定义一个hash您的角色类中的函数,如下所示:

def __hash__(self):
    return hash(self.name)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlalchemy:类型错误:创建实例的不可散列类型,sqlalchemy 的相关文章

随机推荐

  • LINQ - 用distinct和orderby编写查询

    我对 LINQ 还很陌生 假设我有下表 Incident ID DeviceID Time Info 1 1 5 2 2009 d 2 2 5 3 2009 c 3 2 5 4 2009 b 4 1 5 5 2009 a 在 LINQ 中
  • 在 Dev-C++ 中的 GCC 内联汇编中定义字节(Windows 上 AT&T 语法中的 .ascii)

    下面的代码只是在屏幕上显示一个消息框 地址被硬编码以方便 int main asm xorl eax eax n xorl ebx ebx n xorl ecx ecx n xorl edx edx n pushl ecx n 0x0 pu
  • QObject 无法为位于不同线程中的父级创建子级

    您好 需要从后台进行一些套接字通信 我使用过QtConcurrent run对此 但给我警告 QObject Cannot create children for a parent that is in a different thread
  • 在非开发层预览邮件程序

    我在下面有几个邮件预览spec mailer previews On development我可以查看下面的所有预览 rails mailers 但是默认情况下 其他环境中不存在此功能 我想在staging环境并排队这篇文章在这里 http
  • Android中的缩放、旋转和平移操作后如何获取相对于Parent的View位置?

    我正在开发一项功能 其中包括图像缩放 旋转和平移操作 所有这些操作对我来说都运行良好 现在 我需要检查相对于父级的视图位置 我开发了以下代码来获取缩放和翻译后的视图位置 private fun findViewPosition view V
  • 如何在react.js中递归渲染子组件

    我想从其自己的组件中递归添加一个反应组件 我看到了这个例子这是通过子 TreeNodes 进行映射并以相同的方式添加子节点 不幸的是它对我来说根本不起作用 这个想法是有一个简单的评论组件 并且回复将重用相同的组件 var Comment R
  • 是否可以在 MatLab 中使用 .NET 应用程序?

    我对 C 感觉很熟悉 我将设计一个控制台应用程序 该应用程序将从 Web 服务中获取一些数据 我想让一组科学家使用 MatLab 中的数据 实现此目的的一种方法是将其存储在 HDD 上的文件中 然后将其内容加载到 MatLab 中 但这让我
  • getJSON 回调未触发

    我正在通过参与一个包括 SubSonic 和 jQuery 的测试项目来学习 asp net mvc 我遇到的问题是 每次我想要返回的不仅仅是简单字符串 例如 Json 对象 时 我都会遇到困难 因为回调似乎不会触发 或者返回失败 我获取数
  • 德语最好的 MySQL 排序规则是什么

    我正在用德语建立一个网站 所以我将使用像 等等 那么您有什么建议呢 这个答案已经过时了 如需完整的表情符号支持 请参阅这个答案 https stackoverflow com a 48325386 2898712 至于字符集 如果可以的话
  • Tibco - 最大流量限制属性

    我有一个启用了最大流量限制的进程 该值设置为 10 它是一个异步进程 用于每天获取数千条消息 我们注意到 在高峰期 随着EMS服务器队列中消息的增加 tibco进程的性能下降 Tibco 的速度缓慢与 EMS 消息流入的增加之间是否存在任何
  • std::vector 的比较运算符无法找到 T 的比较运算符

    以下非常简单的代码将无法编译 include
  • 使用flutter_bloc库有什么缺点

    BLoC 模式的实现有很多版本 其中之一是 Felix Angelov 的 flutter bloc 在一个社交媒体上 我看到了这样的声明 flutter bloc 对于该项目来说不是一个好的选择 应该选择另一个 BLoC 或另一个状态管理
  • 使用纯 sed 进行复杂的列转置

    我尝试了几个小时才找到pure sed questions tagged sed解决方案this https stackoverflow com q 17384781 2468910问题 显然 不幸的是我没有成功 一个非常棘手的问题 示例
  • 如何在 Excel 中对齐两列中的匹配值,并在其他列中引入关联值

    我想知道如何将一列中的值与另一列中的匹配值对齐 如下所示如何在 Excel 中对齐同一行上的重复项 https stackoverflow com questions 12836396 how to align duplicates on
  • 什么时候应该在 LLVM IR 中向结构添加填充?什么时候不应该?

    当向结构添加填充时 Clang 在不同情况下有不同的行为 规则是什么 对于下面的 C 代码 struct CT1 char c1 c double d1 char c2 struct CT2 char c1 double d1 char c
  • SWT 如何打印scrolledComposite 的内容?

    有谁知道如何打印滚动复合材料的内容 每当我打印到 GC 上时 它只会复制滚动复合材料的当前可视区域 我想要的是能够复制滚动复合的全部内容 例如 下面的代码在一个小窗口内创建了一个巨大的按钮 当我打印下面的 gc 时 它只会输出滚动复合的小可
  • 将新行追加到现有 csv 文件中[重复]

    这个问题在这里已经有答案了 我想将新行添加到系统中现有的 csv 文件中 下面是 MWE 首先 创建一个数据表并将其写入文件 date lt 2017 08 01 investPercent lt 20 expenses lt 20000
  • Java列表参数化?

    我对 Java 很陌生 我写了一个名为 DLPFile 的类 它基本上是其他对象的容器 如字符串 整数 浮点数等 将我的文件放入列表中 然后将其保存在我的会话 来自 Map 类 变量中时很容易 DLPFile file new DLPFil
  • 如何将 .jar 文件安装到 Eclipse 中?

    我已经编写了一个 Eclipse 插件项目并成功导出了 jar 文件 但是当我将 jar 文件复制到 Plugins 文件夹中 也尝试了 dropins 文件夹 并重新启动 Eclipse 后 我仍然无法在 Eclipse Installa
  • sqlalchemy:类型错误:创建实例的不可散列类型,sqlalchemy

    我在尝试更新代码时遇到错误 https github com thrisp flask security https github com thrisp flask security从Python 2 7到3 3 给出以下最基本的实例 te