Python SQLalchemy如何根据另一个表中的日期从另一个表中查询?
所以我试图每天查询访问尝试的次数,失败和成功。这些是我创建的表Python SQLalchemy如何根据另一个表中的日期从另一个表中查询?,python,sqlalchemy,Python,Sqlalchemy,所以我试图每天查询访问尝试的次数,失败和成功。这些是我创建的表 class SystemLog(Base): __tablename__ = 'SystemLog' ID = Column(Integer, primary_key=True) Date = Column(Text) Time = Column(Text) PID = Column(Integer) Message = Column(Text) class Messages(B
class SystemLog(Base):
__tablename__ = 'SystemLog'
ID = Column(Integer, primary_key=True)
Date = Column(Text)
Time = Column(Text)
PID = Column(Integer)
Message = Column(Text)
class Messages(Base):
__tablename__ = 'Messages'
ID = Column(Integer, primary_key=True)
Message = Column(Text)
AccessType = Column(Text)
IP = Column(Integer)
我所尝试的:
test = session.query(SystemLog.Date, Messages.AccessType, func.count(Messages.AccessType))\
.join(Messages).filter(SystemLog.ID==Messages.ID)\
.group_by(SystemLog.Date, Messages.AccessType).all()
SystemLog行的外观:
消息行的外观:
但这给了我一个错误,说我需要使用ON子句。还有一些事情我也不确定。我的表是否正确创建?如何进行联接
也就是说,我无法将所有列放入一个表中。至少,AccessType和IP必须位于单独的表中,日期、时间、PID和消息必须位于一个表中。根据注释中的信息:
- 表之间存在一对一的关系
- 两者之间的关系是相关行中
列的内容相同(意味着每条消息都是唯一的)消息
test = session.query(SystemLog.Date, Messages.AccessType, func.count(Messages.AccessType))\
.join(Messages, SystemLog.message == Messages.message)\
.group_by(SystemLog.Date, Messages.AccessType).all()
就表而言,我会尝试使用更具体的数据类型,例如
Date
应该是sqlalchemy.Date
或sqlachemy.DateTime
。在长字符串(如message
上进行连接可能会很慢,理想情况下,您应该在整数值上进行连接。数据的结构不是很清楚。SystemLog
条目和消息
条目之间的关系是什么?是一号吗?一对多?多对一?多对多?我相信是一对一。基本上它是从一个excel文件中获取的,其中列是日期、时间、PID、消息、AccessType、IP所有数据都在一行中这两个表之间的链接是什么?也就是说,SystemLog
中的哪个列指向消息中的特定行(或者反过来)?这是我不太确定的部分。我觉得有些地方不对劲,这就是为什么我认为我的表创建错误,但我不知道该怎么做。但是我猜消息列是什么链接它们的?你能回答这个问题来显示SystemLog
行及其相应的MessageRow
行的数据吗?谢谢!你是救命恩人!我意识到我也可以在ID上加入,这使得我加入的速度更快