1

我在 spyne 中定义模型以在 SOAP11 中生成多个级别时遇到问题。起初我使用了示例,但我的任务是为已经存在的表生成服务,所以我卡住了,试图了解在 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

最后一个字段是用户表的外键,但它的名称与 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)

帮助我定义类以获得正确的内部标签。实际上它会多 3 个类。

提前感谢,尤里

4

2 回答 2

1

你的答案是正确的。就像简单表的替代方案一样,您可以省略列定义并让 sqlalchemy 的反射引擎来解决。

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

User 类将使用来自表列及其类型的尽可能多的信息进行重构。

于 2016-02-27T11:35:22.907 回答
1

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

from spyne.model.complex import table
Permissions= Array(permission).customize(store_as=table(right='perm_user_id'))
于 2016-02-26T07:10:00.637 回答