gpt4 book ai didi

python - SQLite 日期类型 查询网站数据库时出错

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:12 25 4
gpt4 key购买 nike

我被这个错误困扰的时间最长了,而且它变得非常烦人。我已经检查了我的代码无数次,就像我说的,我对为什么会出现这个 SQLAlchemy 错误感到恼火。

我在做什么:我试图通过使用用户输入以日期时间格式(即“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)

上面的脚本是一个Task的模型

    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)

上面的脚本来 self 的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'}]]

我知道有人回答了有关此问题的问题,但这个问题比后者更具体。如果可以帮忙请回复!谢谢!

最佳答案

看起来您正在将表单中的 user_id 作为 Task 构造函数中的 posted_date 传递

从您的 View 创建新任务

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

关于python - SQLite 日期类型 查询网站数据库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38137782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com