¿Cómo lograr la unión interna utilizando SQLAlchemy?

¿Cómo lograr la unión interna utilizando SQLAlchemy? Estoy tratando de hacer chat simple

class Base(object): def __tablename__(self): return self.__name__.lower() id = Column(Integer, primary_key=True) Base = declarative_base(cls=Base) class PlayerModel(Base): __tablename__ = 'players' username = Column(String(30), nullable=False) email = Column(String(75), nullable=False) password = Column(String(128), nullable=False) class MessageModel(Base): __tablename__ = 'messages' player_id = Column(Integer,ForeignKey('chats.id'), nullable=False) message = Column(String(2000), nullable=False) time = Column(TIMESTAMP, server_default=func.now()) def __repr__(self): return "" % (self.type) 

Quiero leer todos los mensajes más jóvenes que alguna fecha y, en consecuencia, tener una lista de diccionarios como

 [{'username':'x','message':'y','time':'number0'},{'username':'y','message':'z','time':'number1'}, {'username':'x','message':'zz','time':'number'}] 

y para eso necesito una unión interior. ¿Cómo hacer que esto funcione?

Para eso primero necesitas tener una session para hacer una Query . Además, puede ser conveniente tener una relationship en su MessageModel.

 class MessageModel(Base): __tablename__ = 'messages' player_id = Column(Integer,ForeignKey('chats.id'), nullable=False) message = Column(String(2000), nullable=False) time = Column(TIMESTAMP, server_default=func.now()) player = relationship(PlayerModel, backref="messages") 

Esto creará la relación en ambos modelos.

 results = (session.query(PlayerModel) .join(PlayerModel.messages) .values(PlayerModel.username, MessageModel.message, MessageModel.time)) # results will be a generator object # This seems a bit convoluted, but here you go. resultlist = [] for username, message, time in results: resultlist.append({'message': message, 'username': username, 'time': time}) 

Puede haber formas más elegantes de acceder a su estructura de datos, pero esta debería funcionar.