2017-08-11 39 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哦。感謝您的反饋!我想我應該刪除我的答案。你是否同意我的觀點? –