2017-12-18 10 views
0

小さなフラスコのアプリケーションでsqlliteデータベースに接続するsqlalchemyがあります。フラスコの日付クエリ - sqlalchemy ge、leが等しい場合、空でない場合は空

私が行う場合:

check = MyTable.query.filter(MyTable.run_dt >= datetime.date(2017,12,14)).all() 

それから私は、以上2017年12月14日に等しいrun_dtを持つすべての行のリストが含まれているSQLAlchemyのオブジェクトを受け取ります。日付 '2017-12-14'の行がいくつか含まれています。これは私が期待するものです。

私が行う場合:

check = MyTable.query.filter(MyTable.run_dt == datetime.date(2017,12,14)).all() 

私は空のセットを取得します。なぜ私は理解できません。

run_dtは、モデルオブジェクトのdb.Column(db.Date)です。私はそれを文字列に切り替えようとしましたが、うまくいきませんでした。

実際には、上記の文字列を使用すると機能します。

これはうんざりな質問ですが、申し訳ありませんが、私は驚くべきことに誰もが助けることができます。

+0

私が行う場合 check = MyTable.query.filter(MyTable.run_dt> = '2017-12-14'、MyTable.run_dt <= '2017-12-15')。すべて() 14日。私はこの仕事をすることができると思うが、それはかなりばかげているようだ。なぜ、仕事は等しくないのですか? – SuperClueless

+0

run_dtをdb.Column(db.String)型に変更した後、 '2017-12-14 00:00:00'でフィルタリングすると動作します。私はこの解決法を愛していません。 run_dtをDateとして定義すると、正しく使用していないことが示唆されます。 – SuperClueless

+0

人が答えられるようにするには、モデルとサンプルデータをこのような質問に含めます(「なぜ私のデータが得られないのですか」)。つまり、[mcve]です。 –

答えて

0

1つの解決策は、日付を '%Y-%m-%d%H:%M:%S'形式にstrftimeすることです。これは問題を解決します。

しかし、私はこれがなぜ機能し、datetime.datetime(2017,12,14,0,0,0)が機能しないのかわかりません。

関連する問題