我很难理解为什么我的代码在访问数据库时会产生两次查询输出。本质上,我希望我的查询查找今天的日期是否存在于数据库中,并将其与作为记录时间戳的一部分的booked_time日期部分进行比较。如果存在,则打印该记录。正如你可以看到下面我遇到了“双输出”
from flask import request
import sqlite3
def read_query(query):
con = sqlite3.connect("database.db")
cur = con.cursor()
cur.execute(query)
result = cur.fetchall()
return result
q1 = """
SELECT email,booked_time,strftime('%Y-%m-%d',booked_time) as 'date'
FROM bookings
WHERE date = DATE('2023-09-04');
"""
print(read_query(q1))
输出
devbox:~/web_app_project$ python3 schedule.py
[('[email protected]', '2023-09-04 10:00:00', '2023-09-04')]
[('[email protected]', '2023-09-04 10:00:00', '2023-09-04')]
我尝试用con.commit()和con.close()方法来解决这个问题,我得到了同样的结果。我试过使用“with”上下文管理器重写,仍然得到双输出。有人有解决办法吗?我只希望有一个记录出现。
作为@Daviids帮助故障排除的一部分:
from flask import Flask, render_template, request
import sqlite3 as sql
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
@app.route('/process', methods=['POST'])
def process():
if request.method == 'POST':
name = request.form['name']
email = request.form['email']
date = request.form['date']
hour = request.form['hour']
minutes = request.form['minutes']
booked_time = (f"{date} {hour}:{minutes}:00")
with sql.connect("database.db") as con:
cur = con.cursor()
cur.execute(
"INSERT INTO bookings (name, email, booked_time) VALUES (?, ?, ?)",
(name, email, booked_time))
con.commit()
msg = "Record successfully added"
return msg
con.close()
if __name__ == '__main__':
app.run
数据通过网络表单输入。下面是数据库的创建过程。
import sqlite3
connection = sqlite3.connect('database.db')
with open('schema.sql') as f:
connection.executescript(f.read())
cur = connection.cursor()
connection.commit()
connection.close()
模式文件:
CREATE TABLE bookings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
booked_time TIMESTAMP NOT NULL UNIQUE
);
1条答案
按热度按时间jckbn6z71#
我在当地试过了,没有得到双重指纹。我没有使用sqlite文件,而是创建一个内存数据库,创建表并插入一些数据。你可以试试这个,看看你是否有同样的问题?
编辑:如果它仍然发生,我只能想到从Python解释器内部尝试
以
devbox:~/web_app_project$ python3
开始然后
尝试逐块复制和粘贴。