【问题标题】:Flask DateTime won't set with default datetime.utcnow [duplicate]Flask DateTime 不会设置为默认 datetime.utcnow [重复]
【发布时间】:2014-01-22 18:22:31
【问题描述】:

我是 SQLAlchemy 的新手,无法设置创建的 DateTime。我尝试使用许多示例中的“默认”选项。我也尝试过手动设置(我已将其注释掉)。到目前为止,两者都没有工作。任何帮助将不胜感激。

models.py

import datetime
from flask.ext.sqlalchemy import SQLAlchemy
from werkzeug import generate_password_hash, check_password_hash

db = SQLAlchemy()

class User(db.Model):

  __tablename__    = 'users'
  uid              = db.Column(db.Integer, primary_key=True)
  firstname        = db.Column(db.String(40))
  lastname         = db.Column(db.String(40))
  email            = db.Column(db.String(120), unique=True)
  created          = db.Column(db.DateTime, default=datetime.datetime.utcnow())
  confirmed        = db.Column(db.DateTime, nullable=True)
  pwdhash          = db.Column(db.String(100))

  def __init__(self, firstname, lastname, email, password):
    self.firstname = firstname.title()
    self.lastname  = lastname.title()
    self.email     = email.lower()
    self.set_password(password)
    #self.created   = datetime.datetime.utcnow()
    self.confirmed = None

  def set_password(self, password):
    self.pwdhash   = generate_password_hash(password)

  def check_password(self, password):
    return check_password_hash(self.pwdhash, password)

routes.py

from tasks import app
from datetime import datetime
from flask import render_template, request, flash, session, url_for, redirect
from forms import ContactForm, SignupForm, SigninForm
from flask.ext.mail import Message, Mail
from models import db, User, Tags, Tasks

@app.route('/signup', methods=['GET', 'POST'])
def signup():
  form = SignupForm()

  if 'email' in session:
    return redirect(url_for('profile')) 

  if request.method == 'POST':
    if form.validate() == False:
      return render_template('signup.html', form=form)
    else:
      newuser = User(form.firstname.data, form.lastname.data, form.email.data, form.password.data)
      db.session.add(newuser)
      db.session.commit()

      session['email'] = newuser.email
      return redirect(url_for('profile'))

  elif request.method == 'GET':
    return render_template('signup.html', form=form)

【问题讨论】:

    标签: flask flask-sqlalchemy


    【解决方案1】:

    您的default 的问题在于您立即在那里调用datetime.utcnow,并且返回的值(在类定义时)始终用作默认值。您需要传递可调用本身,如下所示:

    # Note the lack of parenthesis after datetime.utcnow
    created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    

    这样 SQLAlchemy 将在插入行时调用 datetime.utcnow 本身。

    【讨论】:

      猜你喜欢
      • 2018-09-14
      • 2018-12-04
      • 2014-10-09
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多