在 FastAPI 中从 MySQL 获取特定日期

Fetching specific date from MySQL in FastAPI

我想根据某个id (msisdn) 从mysql workbench 中获取一个日期。但我不知道如何用 SQLAlchemy 来做。 msisdn 是主键。

应模拟此查询:

SELECT 
    last_port 
FROM 
    `realtime-backend`.portabilidad 
WHERE 
    last_port='2020-04-23 6:00:00' AND 
     msisdn='56977095634'

型号:

class PortabilidadInfo(Base):
      __tablename__ = "portabilidad"
      msisdn = Column(Integer, primary_key=True)
      operator_id = Column(Integer, nullable=True)
      last_port = Column(Date, default=datetime.now(), nullable=True)

代码:

portabilidad_msisdn = '56977095634'
fecha_csv = '2020-04-23 6:00:00'
                
date_info = session.query(PortabilidadInfo).filter(PortabilidadInfo.last_port == fecha_csv).get(portabilidad_msisdn) 
print("FECHA BDD OBJ: ", date_info, type(date_info))

但是我收到一条错误消息:Query.get() being called on a Query with existing criterion.

您可以将术语组合到 filter 语句中:

date_info = session.query(PortabilidadInfo).filter(
    PortabilidadInfo.last_port == fecha_csv,
    PortabilidadInfo.msisdn == portabilidad_msisdn,
).first()

这将检索匹配 last_portportabilidad_msisdn 的第一行。

然后您可以通过 date_info.last_port 访问 last_port 的值。但是,由于您还在查询中包含此值,因此您可以只检查一行是否被 returned(所以检查是否 date_info is None,否则使用 fecha_csv)。

get 是一个特殊的构造,用于从 primary_key 字段中检索某些内容,不能与其他字段一起应用。

但是,由于 msisdn 是主键,该字段不能有任何重复项,因此在任何一种情况下都只能检索一行(它只会 return None 如果日期不匹配)。