gpt4 book ai didi

python - 如何使用SQLAlchemy实现内连接?

转载 作者:太空狗 更新时间:2023-10-29 23:55:16 24 4
gpt4 key购买 nike

如何使用SQLAlchemy实现内连接?我正在尝试进行简单的聊天

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 "<Message('%s')>" % (self.type)

我想阅读所有早于某个日期的消息,结果得到像

这样的字典列表
[{'username':'x','message':'y','time':'number0'},{'username':'y','message':'z','time':'number1'},
{'username':'x','message':'zz','time':'number'}]

为此我需要内部连接。如何让它发挥作用?

最佳答案

为此,您首先需要有一个 session 来进行查询。此外,在 MessageModel 上建立一个 relationship 会很方便。

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")

这将在两个模型上创建关系。

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})

可能有更优雅的方法来处理您的数据结构,但这个应该可行。

关于python - 如何使用SQLAlchemy实现内连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com