[英]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.