を、あなたはLOWER_BOUND < Table.created_on < UPPER_BOUND
をしたいと思います。それを2つに分割する必要があるかもしれませんが、sqlalchemyがその部分を自動的に実行できるかどうかはわかりません。
今週は、下限を取得する曜日に応じて0〜6日を減算し、上限には0〜6を加算します。
現在の月、現在の月と年、下限はYEAR-MONTH-01、上限はYEAR-MONTH-DAYS_IN_MONTHです。
現在の年、下限はYEAR-01-01、上限はYEAR-12-31です。
この情報を入手するには、標準ライブラリからdatetime
パッケージをお試しください。これは、範囲外のうるう年を除いて、本当に簡単です。あなたが正確な時間を扱うか、エポックの制限や閏秒やタイムゾーンやDSTの実行や "Nヶ月/年前"のいずれかを扱わない限り、このようなことは複雑になりません(その場合、 "1ヶ月前「12月31日」、「1月2月29日」など)。あなたがユニットとして月や年のような可変持続時間のものを使用していない限り、日は安全にユニットとして扱うことができるように正確な時計時間は必要ありません。
# In all
from datetime import date, timedelta
today = date.today()
その後、一週間:
月の
weekday = today.weekday()
# lower bound
mon = today - timedelta(days=weekday)
# upper bound
sun = today + timedelta(days=(6 - weekday))
:
days_per_month = {1: 31, 2: 29, 3: 31, ...} # you can fill this in yourself
# lower bound
first = today.replace(day=1)
# upper bound
try:
last = today.replace(day=days_per_month[today.month])
except ValueError:
if today.month == 2: # Not a leap year
last = today.replace(day=28)
else:
raise # just to be safe, in case there's some other error I missed
そして今年の
:すべての場合において
# lower bound
janfirst = today.replace(month=1, day=1)
# upper bound
declast = today.replace(month=12, day=31)
、もし列の内容過去にあることが保証されています(例えば、彼らがdaの場合行がテーブルに追加された場合)、上限を現在の日付に置き換えることができます。または、真夜中に非常に近いところで開始されたクエリーと直後の新しいエントリーの場合は、明日の場合もあります。
私はクエリのロジックを高く評価しますが、質問はPythonの日付範囲を効率的に決定するために役立ちます。下限/上限を取得する方法。 – draxous
[datetime](https://docs.python.org/3.6/library/datetime。html)ライブラリは、これらのすべてを取得するための簡単な手段を提供します。 –
スニペットが追加されました。標準ライブラリはあなたに「今日」を与え、それは月または年の代わりになります(週は少しの計算を必要とします)。ああ、2月の処理ですが、29thをデフォルトにして28thを使用して例外をキャッチすると、ライブラリが効果的にそれを処理します。 –