2016-07-01 33 views
1

このエラーが最も長く続き、非常に迷惑になりました。私は何度も自分のコードをチェックしましたが、このSQLAlchemyエラーがなぜ起こっているのか迷っています。SQLite Date typeデータベースにWebサイトを照会する際にエラーが発生しました

私は何をしていますか?ユーザー入力を使用して、データをDate時間、つまりMM/DD/YYYY形式でデータベースに送信しようとしています。実装されると、データベースに日付を「保存」するまでコードがうまくいくように見えます。

class Task(db.Model): 

__tablename__ = "tasks" 

    task_id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String, nullable=False) 
    due_date = db.Column(db.Date, nullable=False) 
    priority = db.Column(db.Integer, nullable=False) 
    user_id = db.Column(db.Integer, db.ForeignKey('users.id')) 
    posted_date = db.Column(db.Date, default=datetime.datetime.utcnow()) 
    status = db.Column(db.Integer) 

def __init__(self, name, due_date, priority, status, user_id, posted_date): 
    self.name = name 
    self.due_date= due_date 
    self.priority= priority 
    self.status= status 
    self.posted_date = posted_date 
    self.user_id = user_id 

def __repr__(self): 
    return '<name[0]>'.format(self.name) 

スクリプトの上記部分は、上記のスクリプトは、私は既存のデータベースを削除し、上記の資格情報を使用してそれを書き換えるタスク

from views import db 
    from config import DATABASE_PATH 

    import sqlite3 
    from datetime import datetime 

    with sqlite3.connect(DATABASE_PATH) as connection: 
     c = connection.cursor() 

     c.execute("""ALTER TABLE tasks RENAME TO old_tasks""") 

     db.create_all() 

     c.execute("""SELECT name, due_date, priority, 
      status FROM old_tasks ORDER BY task_id ASC""") 

     data = [(row[0], row[1], row[2], row[3], 
      datetime.now(), 1) for row in c.fetchall()] 

    c.executemany("""INSERT INTO tasks (name, due_date, priority, status, 
         posted_date, user_id) VALUES (?, ?, ?, ?, ?, ?)""", data) 

     c.execute("DROP TABLE old_tasks") 

のモデルです。

@app.route('/add/', methods=['GET', 'POST']) 
    @login_required 
    def new_task(): 
     form = AddTaskForm(request.form) 
     if request.method == 'POST': 
      if form.validate_on_submit(): 
       new_task = Task(
        form.name.data, 
        form.due_date.data, 
        form.priority.data, 
        datetime.datetime.utcnow(), 
        '1', 
        session['user_id'] 
       ) 
       db.session.add(new_task) 
       db.session.commit() 
       flash('New entry was successfully posted. Thanks!') 
       return redirect(url_for('tasks')) 
      else: 
       flash("Please put all credentials Necessary") 
       return redirect(url_for('tasks')) 
     return render_template('tasks.html', form=form) 

上記のスクリプトは、私のviews.pyスクリプトから来ており、必要な資格情報を使ってタスクを保存するアルゴリズムの役割を果たします。

私が受けてる迷惑なエラーは、このことを起こる:

sqlalchemy.exc.StatementError: (builtins.TypeError) SQLite Date type only accepts Python date objects as input. [SQL: 'INSERT INTO tasks (name, due_date, priority, user_id, posted_date, status) VALUES (?, ?, ?, ?, ?, ?)'] [parameters: [{'status': datetime.datetime(2016, 7, 1, 5, 24, 48, 23300), 'priority': '6', 'posted_date': 1, 'due_date': datetime.date(2017, 5, 17), 'name': 'lol', 'user_id': '1'}]]

私が質問があることを知っている、このことについて答えたが、この質問は、はるかに具体的な後者よりもです。あなたが返信をお手伝いできる場合は! ありがとう!

答えて

1

あなたのビュー

new_task = Task(
       form.name.data, 
       form.due_date.data, 
       form.priority.data, 
       datetime.datetime.utcnow(), #this should probably be at the end 
       '1', 
       session['user_id'] #check this here 
      ) 

タスクのコンストラクタ

def __init__(self, name, due_date, priority, status, user_id, posted_date): #posted date is the last param 
    self.name = name 
    self.due_date= due_date 
    self.priority= priority 
    self.status= status 
    self.posted_date = posted_date 
    self.user_id = user_id 
から新しいタスクを作成する Taskコンストラクタで posted_date

としてフォームからuser_idを渡しているように見えます

+0

ありがとう!私は間違ったパラメータを渡したとは思わなかった!不思議ではない!パラメータ 'user_id'は入力可能なデータではありません!ありがとうございます:) –

+0

私は助けることができる嬉しい:) – nlloyd

関連する問題