现有数据库结构的Spyne模型

时间:2016-02-25 19:51:56

标签: postgresql sqlalchemy spyne

我遇到了在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

最后一个字段是用户表的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)

帮助我定义类以获得正确的内部标记..实际上它将会再深入3个类。

Thanx in Advance,Yury

2 个答案:

答案 0 :(得分:1)

自己找到,很抱歉打扰任何人,

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

答案 1 :(得分:1)

你的答案是对的。作为简单表的替代方法,您可以省略列定义,并让sqlalchemy的反射引擎弄明白。

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

将使用表列及其类型中尽可能多的信息重建User类。