Datetime 在postgresql表中存储带区域的客户端datimetime

Datetime 在postgresql表中存储带区域的客户端datimetime,datetime,flask,postgresql-9.4,pytz,timestamp-with-timezone,Datetime,Flask,Postgresql 9.4,Pytz,Timestamp With Timezone,我想存储访客最后一次访问我的烧瓶网页 我为其创建了db class TempTable(db.Model): __tablename__ = "tempTable" timeStamp = db.Column(types.Integer(), primary_key=True, autoincrement=True) moment = db.Column(types.Time(timezone=True)) def __init__(self, tsz, mo

我想存储访客最后一次访问我的烧瓶网页

我为其创建了db

class TempTable(db.Model):
    __tablename__ = "tempTable"
    timeStamp = db.Column(types.Integer(), primary_key=True, autoincrement=True)
    moment = db.Column(types.Time(timezone=True)) 

    def __init__(self, tsz, moment):
        self.timeStamp = tsz
        self.moment = moment
但由于我希望将带时区的访客datetime存储在上表的
列中,因此在我的flask应用程序中,我正在创建带时区的datetime,如下所示:

`datetime.datetime.now(pytz.timezone(data["timezone"])).strftime("%Y-%m-%d %H:%M %z")`
然后在
tentable
力矩
列中输入上述内容

然而,令人困惑的是,我正在创建字符串对象,但
moment
column存储日期时间对象,所以我不确定我是否做对了

或者我只需要直接打孔
datetime.datetime.now(pytz.timezone(数据[“timezone”])

注意:注释后更新

import datetime

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from pytz import timezone
from sqlalchemy import types

app = Flask(__name__)
app.config.update({
    'SQLALCHEMY_DATABASE_URI': "postgresql://user_pass_host_db",
})

db = SQLAlchemy(app)


class TempTable(db.Model):
    __tablename__ = "tempTable"
    id = db.Column(types.Integer(), primary_key=True, autoincrement=True)
    moment = db.Column(types.Time(timezone=True))

db.create_all()

eastern = TempTable()
warsaw = TempTable()

eastern.moment = datetime.datetime.now(timezone('US/Eastern')).strftime("%H:%M:%S %z")
warsaw.moment = datetime.datetime.now(timezone('Europe/Warsaw')).strftime("%H:%M:%S %z")
# save our records and check data from db
for i in [eastern, warsaw]:
    db.session.add(i)
    db.session.commit()

    last_moment = TempTable.query.order_by('-id').first().moment
    print('saved: time = %s' % last_moment.strftime("%H:%M:%S %z"))
示例输出:

saved: time = 14:16:39 -0400
saved: time = 20:16:39 +0200
数据库中的记录:

14:16:39 -04:00
20:16:39 +02:00
如您所见,从数据库中提取后,您可以使用
执行任何操作

顺便说一下,在您的情况下,
.strftime(“%Y-%m-%d%H:%m%z”)
并不重要,因为您使用了
类型。时间(时间不是日期)用于字段
时刻

注意:在注释后更新

import datetime

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from pytz import timezone
from sqlalchemy import types

app = Flask(__name__)
app.config.update({
    'SQLALCHEMY_DATABASE_URI': "postgresql://user_pass_host_db",
})

db = SQLAlchemy(app)


class TempTable(db.Model):
    __tablename__ = "tempTable"
    id = db.Column(types.Integer(), primary_key=True, autoincrement=True)
    moment = db.Column(types.Time(timezone=True))

db.create_all()

eastern = TempTable()
warsaw = TempTable()

eastern.moment = datetime.datetime.now(timezone('US/Eastern')).strftime("%H:%M:%S %z")
warsaw.moment = datetime.datetime.now(timezone('Europe/Warsaw')).strftime("%H:%M:%S %z")
# save our records and check data from db
for i in [eastern, warsaw]:
    db.session.add(i)
    db.session.commit()

    last_moment = TempTable.query.order_by('-id').first().moment
    print('saved: time = %s' % last_moment.strftime("%H:%M:%S %z"))
示例输出:

saved: time = 14:16:39 -0400
saved: time = 20:16:39 +0200
数据库中的记录:

14:16:39 -04:00
20:16:39 +02:00
如您所见,从数据库中提取后,您可以使用
执行任何操作


顺便说一句,在您的情况下,
.strftime(“%Y-%m-%d%H:%m%z”)
并不重要,因为您使用了
类型。时间(时间不是日期)用于字段
时刻

是的,我早些时候尝试过,它可以工作。谢谢你的回答。?我认为时间应该始终以Utd格式保存,时区以db为单位。hello@Daniel,在第一次utc时间中,有来自PostGreSQL的utc时区,因此即使utc时区被输入到
时刻
列中,您也无法检索用户的实际时间,因为用户时区未知,在第二种情况下,我们确实有时区,但它的字符串格式,我相信在夏令时开启的情况下会搞砸。所以我认为这里需要做点什么。到目前为止,我还没有检查您接受的答案。@Ciastopiekarz噢。谢谢你的反馈!我想我应该删除我的答案。你同意我的观点吗?你可以选择改进。可能对未来的其他人有用community@Ciastopiekarz我有一点时间。我更新了答案。希望这对我有帮助,因为我早些时候尝试过,而且效果很好。谢谢你的回答。?我认为时间应该始终以Utd格式保存,时区以db为单位。hello@Daniel,在第一次utc时间中,有来自PostGreSQL的utc时区,因此即使utc时区被输入到
时刻
列中,您也无法检索用户的实际时间,因为用户时区未知,在第二种情况下,我们确实有时区,但它的字符串格式,我相信在夏令时开启的情况下会搞砸。所以我认为这里需要做点什么。到目前为止,我还没有检查您接受的答案。@Ciastopiekarz噢。谢谢你的反馈!我想我应该删除我的答案。你同意我的观点吗?你可以选择改进。可能对未来的其他人有用community@Ciastopiekarz我有一点时间。我更新了答案。希望这有帮助