使用Flask,SQLAlchemy和SQLite3。
长话短说;当我运行服务器在网页上输入我的数据并提交它时,更改不会反映在数据库中,尽管我没有错误。但是,当我运行shell /解释器并输入我的模型时,db对象然后输入数据库中的更改ARE。这是我所指代码的片段。我必须遗漏一些简单的东西。
from flask import Flask, render_template, request, session
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///core1.db'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
class Motor(db.Model):
__tablename__ = 'Motor'
asset_tag = db.Column('Asset Tag', db.String(100), unique=True, primary_key = True)
horsepower = db.Column('Horsepower', db.Integer)
def __init__(self, asset_tag, horsepower):
self.asset_tag = asset_tag
self.horsepower = horsepower
@app.route('/submit', methods=['GET', 'POST'])
def submit():
error = None
if request.method == 'POST':
asset_input = request.form['asset_tag']
horsepower_input = request.form['horsepower']
pass_to_db = Motor(asset_input, horsepower_input)
db.session.add(pass_to_db)
db.session.commit
return render_template('submit.html', error=error)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug = True)
为了测试我的表单逻辑是否出错,我写了一个脚本,它只是接受了原始输入,并且我得到了相同的结果。原始用户变量条目仅在shell中运行时才会显示,但是当我运行脚本时,没有添加任何内容。这是我在下面使用的测试;
def testentry():
asset_input = raw_input("Enter asset tag: ")
horsepower_input = raw_input("Enter the horsepower: ")
pass_to_db = Motor(asset_input, horsepower_input)
db.session.add(pass_to_db)
db.session.commit
testentry
答案 0 :(得分:1)
我最后没有关闭我的commit()方法。最后一点代码现在看起来像这样并且有效;
@app.route('/submit', methods=['GET', 'POST'])
def submit():
error = None
if request.method == 'POST':
asset_input = request.form['asset_tag']
horsepower_input = request.form['horsepower']
pass_to_db = Motor(asset_input, horsepower_input)
db.session.add(pass_to_db)
db.session.commit()
return render_template('submit.html', error=error)