簡體   English   中英

SQLAlchemy 過濾器將 datetime.time 轉換為 datetime.datetime

[英]SQLAlchemy filter converting datetime.time to datetime.datetime

我正在使用 SQLAlchemy 並且不能在我的一生中讓它過濾 TIME 列而不將其視為 DATETIME。

我將 class 定義為

class v_MyView(Base):
  __table__ = Table('MyView', Base.metadata,
    Column('id', Integer, primary_key=True),
    Column('EntryDateTime', DateTime),
    Column('EntryDate', Date),
    Column('EntryTime', Time),
    ...

如果我這樣做

results = db.query(v_MyView).first()
print(results.EntryTime)

我按預期得到datetime.time(15, 30, 22, 560000)

但是,如果我這樣做

results = db.query(v_MyView).filter(v_MyView.EntryTime >= datetime.time(5,0)).first()
print(results.EntryTime)

我收到一個錯誤

[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The data types time and datetime2 
are incompatible in the greater than or equal to operator. (402) (SQLExecDirectW)

並查看生成的查詢,我看到

WHERE [v_MyView].[EntryTime] >= ?]
[parameters: (datetime.datetime(1900, 1, 1, 5, 0),)]

檢查過濾器,它似乎是正確生成的

right: BindParameter('%(140718484304128 EntryTime)s', datetime.time(5, 0), type_=Time())

我錯過了什么還是這是一個錯誤?

這已被接受為SQLAlchemy 存儲庫中的錯誤

短期解決方案是使用演員表:

from sqlalchemy import cast
query.filter(my_column >= cast(datetime.time(5, 0), TIME))  

暫無
暫無

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

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