Flask-SQLAlchemy - 无法插入数据

时间:2018-01-19 17:14:19

标签: python sqlalchemy

我试图在收到数据后将一些数据保存到我的数据库中

这是我的api.py文件:

from flask import Flask, request, abort, jsonify
from flask_cors import cross_origin
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost:5432/****'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class Communication(db.Model):
    __tablename__ = 'comm'

    id = db.Column('comm_id', db.Integer, primary_key=True)
    early = db.Column(db.Boolean, nullable=False)
    late = db.Column(db.Boolean, nullable=False)
    message = db.Column(db.String, nullable=False)

   def __init__(self, early, late, message):
        self.early = early
        self.late = late
        self.message = message


db.drop_all()
db.create_all()

@app.route('/api/form', methods=['POST'])
@cross_origin(origin='localhost', headers=['Content- Type', 'Authorization'])
def retrieve_info():
    if not request.json:
        abort(400)
    else:
        early = request.json.get('early')
        late = request.json.get('late')
        message = request.json.get('message')

        test = Communication(early=early,
                                        late=late,
                                        message=message)

        db.session.add(test)
        db.session.commit()

        return jsonify('ok'), 200



if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

这是我发送的json:

{
 "early": true ,
 "late": false ,
 "message": "Hello world" 
}

奇怪的是,我收到0异常或错误消息,但我的数据库中没有保存任何内容。 我不明白我的代码有什么问题(我检查了与数据库的连接是否正常)

2 个答案:

答案 0 :(得分:1)

关于我的评论,我想我通过使用你的commit语句定义一个变量来看你想要完成什么,但我更喜欢try / else来完成它。我可能会重构你的代码如下:

def retrieve_info():
    if not request.json:
        abort(400)
    try:
        early = request.json.get('early')
        late = request.json.get('late')
        message = request.json.get('message')

        test = Communication(early=early,
                             late=late,
                             message=message)

        db.session.add(test)
        db.session.commit()

        return jsonify('ok'), 200

    except Exception as e:
        return jsonify(e), 500

这样,如果从实例化db模型到将数据提交到db时出现异常,则except部分将优雅地告诉您原因。

答案 1 :(得分:0)

添加对象后你没有commit the session