【问题标题】:How to allow sqlite3 to store tzinfo?如何让 sqlite3 存储 tzinfo?
【发布时间】:2019-09-11 12:20:24
【问题描述】:

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

如何让 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))")

【问题讨论】:

  • 把你关心的每个方法返回的值存储在同一行的列中?我有一个脚本,可以将完整的 zoneinfo 目录树导入我应该发布的 sqlite 数据库中......这可能会给你一个更好的主意。

标签: python sqlite pytz


【解决方案1】:

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

但是 SQLite 并没有禁止你将 blob 存储到列中。因此,您可以腌制tzinfo 并存储它,或者组成您自己的表示形式(即一串时区信息)并存储它。当您从数据库中检索时,只需从您的表示中解压缩或重建 tzinfo。

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

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 2015-04-19
    • 2019-07-04
    • 2011-03-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多