现有数据库结构的 Spyne 模型

Spyne model for existing Database structure

我在 spyne 中定义模型以生成多个级别时遇到问题 "in" SOAP11。 我最初使用示例,但我的任务是为已经存在的 table 生成服务,所以我卡住了并试图了解是否要在 Spyne 属性或 Sqlalchemy 中查找。

准确地说,我将以网站为例并展示我想要达到的目标:

class Permission(TableModel):
__tablename__ = 'permission'

id = UnsignedInteger32(pk=True)
application = Unicode(values=('usermgr', 'accountmgr'))
operation = Unicode(values=('read', 'modify', 'delete'))
perm_user_id = integer

最后一个字段是用户 table 的 FK,但其名称不同于 user_id

class User(TableModel):
__tablename__ = 'user'

id = UnsignedInteger32(pk=True)
user_name = Unicode(32, min_len=4, pattern='[a-z0-9.]+', unique=True)
full_name = Unicode(64, pattern='\w+( \w+)+')
email = Unicode(64, pattern=r'[a-z0-9._%+-]+@[a-z0-9.-]+\.[A-Z]{2,4}')
last_pos = Point(2, index='gist')
permissions = Array(Permission).store_as('table')

--- SQL 生成尝试添加 "WHEN user.id = permission.user_id" 但我需要另一个字段 (perm_user_id) 进行过滤

帮我定义 class 以获得正确的内部标签.. 实际上它会再 class 深 3 个左右。

提前致谢,Yury

自己找的,不好意思打扰了,

from spyne.model.complex import table
Permissions= Array(permission).customize(store_as=table(right='perm_user_id'))

你的回答是正确的。作为简单 tables 的替代方案,您可以省略列定义并让 sqlalchemy 的反射引擎计算出来。

meta = TableModel.Attributes.sqla_metadata
meta.reflect()
class User(TableModel):
    __table__ = meta.tables['user']

将使用来自 table 列及其类型的尽可能多的信息重建用户 class。