2

SQLite データベースで SQLAlchemy を使用するアプリケーションを作成しています。他の操作が期待どおりに機能するため、データベース、テーブル、およびマッピングが正しく構成されていると思います。関数にパラメーターとして指定された datetime.date() と一致する日付フィールドを持つすべてのオブジェクトを取得する関数を作成しようとしています。これが私の最初の試みです:

def get_objects_matching_date(session,my_date):  
    return session.query(Table).filter(Table.date_field == my_date).all()

Table条件に一致するオブジェクトが含まれていることはわかっていますが、関数は何も返しません。

SAのドキュメントを読んで、sqlite にはネイティブ サポートdatedatetime型がなく、文字列として格納されていることを知っています。ただし、SA は、(結果を返すとき) および (レコードを挿入するとき)dateまたはdatetimeオブジェクトからの変換を処理することになっています。比較フィルターを実行するときにもこれを処理できるはずだと思います。私はいくつかの異なる SO スレッドを読み、 を使用between()して一致するオブジェクトを除外することを検討しましたが、正確なものが探しているmy_date場合は必要ないようです。==オブジェクトの比較を確実に行うために using も調べまし.filter(cast(Table.date_field,DATE) == my_date)たが、それもうまくいかなかったようです。

特にSQLiteデータベースで、SQLAlchemyが日付を処理する方法について明らかに何かが欠けています。DateSQLAlchemy によって SQLite db に保存されたdatetime.date()オブジェクトと、パラメータとして提供されたオブジェクトとの正確な一致を取得するにはどうすればよいですか? 助けてくれてありがとう。

4

3 に答える 3

3

これは非常に遅いかもしれませんが、遅くならないよりはましなので、他の人に利益をもたらすかもしれません:)

両方を Date にキャストしてみてください:

from sqlalchemy import Date, cast
from datetime import datetime

created_at = datetime.now().date()
query.filter(cast(Model.created_at, Date) == cast(created_at,Date))
于 2015-03-05T15:49:53.557 に答える