簡體   English   中英

SQLMODEL 背景錯誤,日期為 object

[英]SQLMODEL background error with date object

我正在嘗試使用 sqlmodel、fastapi、sqlalchemy 比較日期對象。 我的 ORM class 看起來像這樣:

class Evergreen(SQLModel,table=True):
    id_seq: Optional[int] = Field(default=None,primary_key=True)
    phase_end: Optional[date] = None
    phase_start: Optional[date] = None
    phase_type: Optional[str] = None
    software_product_version_name: Optional[str] = None
    product_name: Optional[str] = None
    software_product_version_id: Optional[int] = None
    product_id: int 

我的 function 是這樣的:

@app.get(
    "/products/",
    summary="Query all evergreen products",
    response_description="Successful Query",
    tags=[Tags.items]
)
def get_product_evergreen(product_id: Optional[int] = None,days_ago: Optional[int] = None ,session: Session = Depends(get_session)) -> list:
    query = select(Evergreen,Mapping.product_alias).where(Evergreen.product_id == Mapping.eim_product_id)
    if product_id:
        query = query.where(Mapping.eim_product_id == product_id)
    if days_ago:
        margin = date.today() - timedelta(days_ago)
        query = query.where(date.today() >= Evergreen.phase_end - margin)
    
    return session.exec(query).fetchall()

Evergreen.phase_end在 oracle 中有DATE類型,這是我在后端的數據庫。 我收到以下錯誤:

sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) ORA-00932: inconsistent datatypes: expected NUMBER got DATE
[SQL: SELECT evergreen.id_seq, evergreen.phase_end, evergreen.phase_start, evergreen.phase_type, evergreen.software_product_version_name, evergreen.product_name, evergreen.software_product_version_id, evergreen.product_id, 
mapping.product_alias
FROM evergreen, mapping
WHERE evergreen.product_id = mapping.eim_product_id AND evergreen.phase_end - :phase_end_1 <= :param_1]
[parameters: {'phase_end_1': datetime.date(2022, 10, 26), 'param_1': datetime.date(2022, 11, 25)}]
(Background on this error at: https://sqlalche.me/e/14/4xp6)

我不明白為什么數據庫需要一個數字。

您的查詢輸入似乎有誤。

嘗試這個,

    if days_ago:
        margin = date.today() - timedelta(days_ago)
        query = query.where(Evergreen.phase_end =< date.today() + margin)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM