在下面有點掙扎。
我有一個簡單的 HTML 頁面,其中包含 3 個表單、用戶、開始日期和結束日期。代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>date picker</title>
</head>
<body>
<h1>Make A Short URL</h1>
<form action="/" method="post">
<label for="name">Enter Your Name</label>
<input type="text" name="name" value="" required>
<label for="date1">Enter date Beginning </label>
<input type="date" name="date1" value="" required>
<label for="date2">Enter date End </label>
<input type="date" name="date2" value="" required>
<input type="submit" value="Submit">
</form>
</body>
</html>

然后我使用 Python Flask 框架將其結果插入到資料庫中。我已經獲取了 Form 的值,并且可以在 python 中正確列印這些值。我面臨的問題是,當將這些日期值傳遞給 SQLalchemy 以將它們插入我的資料庫時,它插入不正確。
使用列印陳述句,我跟蹤了每個階段,以查看值是否正確地從 HTML 表單中出現。在將其傳遞給資料庫之前,一切似乎都是正確的。
代碼正確執行,沒有錯誤,但是資料被插入到資料庫中的多行中?是否有一個原因 ?
非常感謝任何輸入!
插入后的資料庫示例:

蟒蛇代碼:
from flask import Flask, render_template, url_for, request, redirect
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
class database(db.Model):
id = db.Column(db.Integer, primary_key=True)
user = db.Column(db.String(200))
startdate = db.Column(db.String(10))
enddate = db.Column(db.String(10))
@app.route('/', methods = ['POST','GET'],)
def signup():
if request.method == 'GET':
return render_template('home.html')
elif request.method == 'POST':
name = request.form['name']
print("The name is '" name "'")
startdate1 = request.form['date1']
print("The Start date is '" startdate1 "'")
enddate1 = request.form['date2']
print("The end date is '" enddate1 "'")
dbname = database(user=name)
dbstartdate = database(startdate=startdate1)
print(dbstartdate)
dbenddate = database(enddate=enddate1)
try:
db.session.add(dbname)
db.session.add(dbstartdate)
db.session.add(dbenddate)
db.session.commit()
return redirect('/')
except:
return 'There was an issue adding your task'
return redirect('/')
if __name__ == '__main__':
app.run(debug=True)
uj5u.com熱心網友回復:
問題是你打db.session.add()了三遍。這將進行三個獨立的交易。相反,您需要單個記錄插入:
@app.route('/', methods = ['POST','GET'],)
def signup():
if request.method == 'GET':
return render_template('home.html')
elif request.method == 'POST':
name = request.form['name']
print("The name is '" name "'")
startdate1 = request.form['date1']
print("The Start date is '" startdate1 "'")
enddate1 = request.form['date2']
print("The end date is '" enddate1 "'")
record = database(user=name,
startdate=startdate1,
enddate=enddate1)
try:
db.session.add(record)
db.session.commit()
return redirect('/')
except:
return 'There was an issue adding your task'
return redirect('/')
換句話說,您希望一次性創建database具有所有屬性的類的一個實體。然后將其作為單個完整記錄插入,而不是三個實體,每個實體具有一個屬性。
注意事項:
return redirect('/')在視圖功能的最后是多余的。您的代碼不可能到達那個點(它要么拋出例外,要么不拋出例外,但兩條路徑都已經有了自己的return值)- 擁有泛型
except并不是一個好習慣。這實際上KeyboardInterrupt會被捕獲,因此甚至可能很難在長時間的任務中停止您的應用程式。即使您不想處理個別例外,請確保使用,except Exception:以便您實際上可以中斷代碼 - 在代碼中有空格沒有壞處。確保使用空行在概念上分隔函式/類等。將所有內容粉碎在一起很難閱讀
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325061.html
標籤:Python sqlite 烧瓶 烧瓶-sqlalchemy
上一篇:在有人將我的作業全部撤回后,我如何將我的舊提交復制到新的提交,以達到同樣的效果?
下一篇:從代碼插入新行時使用資料庫默認值
