2009-11-16 4 views
2

sqlalchemy의 문서를 읽으면 직렬화 부분을 보았습니다.
내가
그 처리 장고 확장이 JAX-RS와 같은 휴식의 웹 서비스와 SA 모델과 일치하는 XML serializer를 사용하는 가능성에 대해 궁금 해서요 : 그런 종류가 이미있는 경우 django_roa
당신은 알고 계십니까 sqlalchemy에 대한 developped 또는 그것을 할 수 있다면 ??
감사sqlalchemy REST 직렬화

+0

내가 원하는 것을 보여줍니다 에 http : //의 bitbucket .org/ee_lars/resttest 코드가 정말 못생긴다. 직렬화는 고전적인 필드 (Integer, Unicode, Boolean ..)에서는 괜찮지 만, 외래 키를 다루는 방법을 찾지 못했다. 필드가 특정 모델 (모델의 매퍼 (mapper)에서 나온 것임)을 감지하고 관련 모델의 URI를 직렬화 된 리소스의 링크로 두는 것이 가능하다고 생각합니다. 어쨌든 나는 그것을 할 수있는 방법에 대한 생각이 없습니다 : 어떤 가능성/아이디어 ??? 감사. –

답변

1

sqlalchemy.ext.serializer는 모델 객체를 처리하지 않습니다, 쿼리, 표현 및 기타 내부 SQLAlchemy의 객체의 (pickle 모듈) 산세를 지원하기 위해 존재한다. 어떤 방법으로도 모델 객체를 XML로 직렬화하는 데 도움이되지 않습니다. 아마도 pyxser과 같은 것이 유용 할 것입니다.

+0

확인해 보겠습니다. 감사합니다. –

2

그것의 전체 RFC2616 준수까지 먼 길하지만, 프로토 타입, 나는 이런 식으로 뭔가 할 : 난에 작은 응용 프로그램을 썼습니다 일부 연구 후

from sqlalchemy import create_engine, Table, Column, Integer, String, ForeignKey, UniqueConstraint 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relation, backref, sessionmaker 
from sqlalchemy.sql.expression import desc 
import web 
import json 

DB_PATH = 'sqlite:////tmp/test.db' 

Base = declarative_base() 

class LocalClient(Base): 
    __tablename__ = 'local_clients' 
    __jsonexport__ = ['id', 'name', 'password'] 

    id = Column(Integer, primary_key=True) 
    name = Column(String, unique=True, nullable=False) 
    password = Column(String) 

    def __init__(self, name, password): 
     self.name = name 
     self.password = password 

    def __repr__(self): 
     return "<LocalClient('%s', '%s')>" % (self.name, self.password) 

urls = (
    '/a/LocalClient', 'LocalClientsController' 
) 

class Encoder(json.JSONEncoder): 
    '''This class contains the JSON serializer function for user defined types''' 
    def default(self, obj): 
     '''This function uses the __jsonexport__ list of relevant attributes to serialize the objects that inherits Base''' 
     if isinstance(obj, Base): 
      return dict(zip(obj.__jsonexport__, [getattr(obj, v) for v in obj.__jsonexport__])) 
     return json.JSONEncoder.default(self, obj) 

class LocalClientsController: 
    '''The generic RESTful Local Clients Controller''' 
    def GET(self): 
     '''Returns a JSON list of LocalClients''' 
     engine = create_engine(DB_PATH, echo=False) 
     Session = sessionmaker(bind=engine) 
     session = Session() 
     clis = session.query(LocalClient) 
     return json.dumps([c for c in clis], cls=Encoder)