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上加入,这使得我加入的速度更快