Datetime 在postgresql表中存储带区域的客户端datimetime
我想存储访客最后一次访问我的烧瓶网页 我为其创建了dbDatetime 在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
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我有一点时间。我更新了答案。希望这有帮助