如何让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 小时以内)。
我正在尝试将 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 小时以内)。