如何让sqlite3存储tzinfo?

How to allow sqlite3 to store tzinfo?

我正在尝试将 tzinfo 得到的 from tzlocal.getlocalzone() 存储到 sqlite3 table。

如何让 sqlite 接受 tzinfo 类型?

import sqlite3
import datetime
import pytz
from tzlocal import get_localzone

db = sqlite3.connect("tztestings.sqlite", detect_types=sqlite3.PARSE_DECLTYPES)
db.execute("CREATE TABLE IF NOT EXISTS history (time TIMESTAMP NOT NULL, timediff TZINFO NOT NULL,"
           " account TEXT NOT NULL, amount INTEGER NOT NULL, PRIMARY KEY (time, account))")

在我看来,您想稍后从 SQLite 数据库中取回 tzinfo。所以答案是你不能。

但是 SQLite 并不禁止您将 blob 存储到列中。所以你可以 pickle tzinfo 并存储它,或者组成你自己的表示(即一串时区信息)并存储它。当您从数据库中检索时,只需从您的表示中解开或重建 tzinfo。

Pickled 版本在某些情况下可能没有用,尤其是您希望在 SQL 语句中支持某些计算(例如,与给定时区相差 1 小时以内)。