我从困难的迁移中将enum放入我的桌面时遇到了麻烦.
MVCE在这里:https://pastebin.com/ng3XcKLf
(SQLAlchemy 1.2,psycopg2 2.7.3.2和postgres 10.1 – 第15行需要使用postgres URI进行修改)
我阅读了有关SQLAlchemy / Postgres和Enums Arums的问题,但根据我在问题跟踪器中找到的内容,用1.1解决了这个问题.
有人能指出我正确的方向吗?
变体1:尝试使用postgres枚举类型的属性
op.bulk_insert(permission,[{
'name': 'ViewContent','contexts': [pgpermissioncontexts.resourceType]
}])
这失败了:AttributeError:’Enum’对象没有属性’resourceType’
变体2:尝试使用底层python Enum的属性
op.bulk_insert(permission,'contexts': [PermissionContexts.resourceType]
}])
这与以下类型为permissioncontexts []的sqlalchemy.exc.ProgrammingError:(psycopg2.ProgrammingError)col失败,但表达式的类型为text []
变体3:将字符串数组转换为枚举数组
op.bulk_insert(permission,'contexts': sa.cast([PermissionContexts.resourceType],sa.ARRAY(pgenum))
}])
这可能会也可能不会起作用 – python进程可以使用4GB的内存,然后坐在那里直到终止.
变体4:插入空数组
op.bulk_insert(permission,'contexts': []
}])
这很有效,但显然没有价值.
这也在this answer中描述.使用ArrayOfEnum而不是ARRAY,您的变体2可以工作:
op.bulk_insert(permission,'contexts': [PermissionContexts.resourceType],}])
转换为ARRAY(permissioncontexts)也应该有效,并且在不使用bulk_insert()时可以正常工作
op.execute(permission.insert().values({
'name': 'ViewContent',ARRAY(pgpermissioncontexts)),}))
或者在使用bulk_insert(multiinsert = False)时:
op.bulk_insert(permission,}],multiinsert=False)
似乎有一个malmbic或sqlalchemy处理多个游戏的错误.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。