【发布时间】:2017-08-15 16:18:48
【问题描述】:
我创建了一个表,该表的列具有日期时间和时区。 在我的 model.py 中:
db = SQLAlchemy(app)
class Messages(db.Model):
__tablename__ = 'messages'
msgId = db.Column('msg_id', db.Integer, primary_key=True)
fullName = db.Column(db.String(60))
message = db.Column(db.String)
email = db.Column(db.String, unique=True)
visitorId = db.Column(db.String(10))
done = db.Column(db.Boolean)
pub_date = db.Column(types.Time(timezone=True))
def __init__(self, fullName, email, message, visitorId, submitTime):
self.fullName = fullName
self.email = email
self.message = message
self.visitorId = visitorId
self.done = False
self.pub_date = submitTime
我在heroku pg:psql 上使用db.create_all() 创建了表格,结果如下:
DATABASE=> \d messages
Table "public.messages"
Column | Type | Modifiers
-----------+-----------------------+-----------------------------------------------------------
msg_id | integer | not null default nextval('messages_msg_id_seq'::regclass)
fullName | character varying(60) |
message | character varying |
email | character varying |
visitorId | character varying(10) |
done | boolean |
pub_date | time with time zone |
无论我使用哪个时区/日期时间,我使用的时区似乎都会受到+00 的打击,这是 UTC。
4 | ciasto | testing | | 9IQVW1K6W | f | 15:48:31.784704+00
为什么会这样?
我正在使用下面的路由函数来打发时间,该函数应该将正确的 dtWithZone 从下面传递到 postgreSQL 的表消息 pub_date
@app.route('/newmsg', methods=['GET', 'POST'])
def newmsg():
form = _appforms.MessagingForm()
if form.validate_on_submit():
name = request.form['fullName']
ip = request.access_route[0] # gives ip address of the visitor
unique_visitor_id = request.cookies.get("unique_visitor")
data = _utils.getJsonFromURL("http://ip-api.com/json/{}".format(ip))
tz = "Asia/Kolkata"
if data["status"] == "success":
tz = data["timezone"]
flash("Your IP is {} and you are visiting this site from {} timezone.".format(ip, tz))
dtWithZone = datetime.datetime.now(pytz.timezone(tz))
msg = Messages(name, request.form['email'], request.form['message'], unique_visitor_id, dtWithZone)
_db.session.add(msg)
_db.session.commit()
msg = "Thank you, {}".format(name)
return render_template('thankyou.html', form=form, msg=msg)
return render_template('newMessage.html', form=form, title=" | Messaging", msg="Write your message")
但是,这在我的本地计算机上正常工作,并且查看表条目我可以看到:
8 | tester | local teasing | | NV33A1L66 | f | 21:09:24.804903+05:30
【问题讨论】:
-
不是 MySQL。删除标签。
标签: postgresql datetime heroku flask