在Shell中运行但不在脚本中运行

时间:2016-01-22 04:05:27

标签: python flask flask-sqlalchemy

使用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

1 个答案:

答案 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)