アプリケーションでメタデータのオフライン処理を行うためにローカルの sqlite データベースを使用していますが、メタデータにはタイムスタンプが含まれています。
次のように宣言されたテーブルがあります。
CREATE TABLE if not exists tbl_dbsync_meta (
maindb_last_checked TIMESTAMP,
global_scores_last_checked TIMESTAMP,
localscores_syncup_last_checked TIMESTAMP)
さて、ある時点で、CURRENT_TIMESTAMP
上記の他のすべてのタイムスタンプとともに sqlite から を取得して、当然のことながら、現在とこれらすべての他のタイムスタンプとの時間差を把握します。
SELECT CURRENT_TIMESTAMP as this_time, * FROM tbl_dbsync_meta
問題は、他のすべてのフィールドが Python で "datetime" オブジェクトとして正しく取得されることです。ただしCURRENT_TIMESTAMP
、文字列として返されます。
キャストしてみましたCURRENT_TIMESTAMP
:
SELECT CAST(CURRENT_TIMESTAMP AS TIMESTAMP), * FROM tbl_dbsync_meta
しかし、現在は INTEGER として返されており、返されるのは年 (2012) だけです。
これを回避する簡単な方法はSELECT
、時間差を python に取得してからいじる代わりに、sqlite 自体から直接時間差を取得することです。別のオプションは、によって返された文字列を使用しCURRENT_TIMESTAMP
、Python でそれを「datetime」に変換して使用することです。
CURRENT_TIMESTAMP
ただし、 (キャストまたはその他の)フィールドと他のフィールドの違いを理解する必要がありTIMESTAMP
ます。これが機能しないのは間違っているようです。
ご協力いただきありがとうございます。
PS: Python の datettime オブジェクトを SQLite に直接格納することはありません。このテーブルを更新する必要があるときはいつでも、SET global_scores_last_checked = CURRENT_TIMESTAMP
. 必要に応じて、SQLite から Python に日付を取得するだけです。