2017-08-11 40 views
1

我想将访问者上次访问存储到我的瓶颈网页。在postgresql表中存储具有区域的客户端datimetime

为我创造分贝

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 

但因为我想访问者日期时间与区被存储在上面的表格中moment列,在我的瓶的应用程序,我与时区创建日期时间如下图所示:

`datetime.datetime.now(pytz.timezone(data["timezone"])).strftime("%Y-%m-%d %H:%M %z")` 

然后将上面的文字打入momenttempTable

但是,混乱是我创建字符串对象,但moment列存储日期时间对象,所以不知道我做对了!

或者我只需要直接打datetime.datetime.now(pytz.timezone(data["timezone"]))

回答

0

:评论

后更新
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 

正如你所看到的,你可以做任何操作moment从数据库中提取后。

顺便说一句,你的情况.strftime("%Y-%m-%d %H:%M %z")不要紧,因为你用types.Time(时间不日期)现场moment

+1

是的,我早些时候尝试过,它的工作原理。感谢您的回答 。?我相信时间应该总是以UDB的时区在db中保存。 –

+0

hello @Daniel,在第一个utc时间里有来自PostGreSQL的utc时区,所以即使UTC时区被冲入“时刻”列,您也无法检索到用户的实际时间,因为用户时区未知,第二种情况是我们做有时区,但它的字符串格式化,我相信可以在夏令时的情况下搞乱。所以我认为这里需要做一些事情。截至目前,我没有检查你接受的答案。 –

+0

@Ciastopiekarz哦。感谢您的反馈!我想我应该删除我的答案。你是否同意我的观点? –