【Python】Sqliteでの日付形式(フォーマット)を扱うときのメモ(変換、比較)

スポンサーリンク

何度も検索してしまう。だめだなぁということで、見るべきURLをメモ。

 

スポンサーリンク

形式

SQLiteでは日付をテキスト文字列として保存することができます。
しかし、日付データを比較するためには、SQLiteがサポートする日付フォーマットに変換する必要があります。

Pythonのdatetimeモジュールを使用して、SQLiteの日付フォーマットに変換することができます。
以下は、PythonでSQLiteの日付フォーマットに変換する方法の例です。

import datetime
date_str = '2023-04-15'
dt = datetime.datetime.strptime(date_str, '%Y-%m-%d')
sqlite_date_str = dt.strftime('%Y-%m-%d %H:%M:%S')
print(sqlite_date_str) # 2023-04-15 00:00:00

その他形式は以下のURLを参考にしてください。

https://leben.mobi/blog/python_date_format/python/
SQLiteで日付時刻を扱う際のポイント - Qiita
#要点 SQLiteでは日付時刻は文字列として格納されるが、日付時刻型があると思って扱った方が楽。 SQLiteは日付時刻をUTCとして保持する。 SQLiteに日付時刻を渡す・取り出す際には関数を…

 

比較

以下を参考として学習。

SQLite _ 日付期間比較

注意点として、PythonでSQLiteの日付比較を行う場合には、まず日付をPythonのdatetimeオブジェクトに変換し、その後SQLiteの日付フォーマットに変換する必要があります。そして、execute()メソッドのパラメータとして、日付フォーマットを使用したクエリを実行する必要があります。

以下は、SQLiteで日付データを現在日と同じかを比較する例です。

import sqlite3
import datetime
# SQLiteに接続する
conn = sqlite3.connect('mydatabase.db')
c = conn.cursor()
# 日付を文字列で定義する
date_str = '2023-04-15'
# Pythonのdatetimeモジュールを使用して、SQLiteの日付フォーマットに変換する
dt = datetime.datetime.strptime(date_str, '%Y-%m-%d')
sqlite_date_str = dt.strftime('%Y-%m-%d %H:%M:%S')
# SQLiteのDATE()関数を使用して、日付を比較する
c.execute("SELECT * FROM mytable WHERE DATE(mydate) = ?", (sqlite_date_str,))
rows = c.fetchall()
# 結果を表示する
for row in rows:
print(row)
# SQLiteから切断する
conn.close()

 

現時点との時刻差がほしいときもあります。SQLiteから日付形式データを取得し、

現在時刻と比較して10時間以上前の時刻かを判定するPythonスクリプトの例です。なお、日付形式は「YYYY-MM-DD HH:MM:SS」を想定しています。

import sqlite3
import datetime
# SQLiteに接続
conn = sqlite3.connect('database.db')
cur = conn.cursor()
# データベースから日付形式のデータを取得
cur.execute("SELECT datetime_column FROM table_name")
for row in cur.fetchall():
# 日付形式のデータをdatetimeオブジェクトに変換
datetime_obj = datetime.datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S')
# 現在時刻との差分を計算
diff = datetime.datetime.now() - datetime_obj
# 差分が10時間以上かどうかを判定
if diff.total_seconds() >= 36000:
print("10時間以上前のデータがあります。")
# 接続を閉じる
conn.close()

 

 

スポンサーリンク
Python技術的なこと雑記帳
Heywaをフォローする

コメント

タイトルとURLをコピーしました