+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Flask-反序列化JSON并加载到Postgres DB

发布于2021-04-12 14:49     阅读(687)     评论(0)     点赞(12)     收藏(3)


0

1

2

3

4

5

6

7

8

9

我有一个带有后端Flask的前端React应用程序。当从React提交表单时,我想将数据发送到后端Flask应用程序,然后将其添加到Postgres DB。

反应-handleSubmit

  handleSubmit(event){

        fetch('http://localhost:5000/results', {
            method: 'POST',
            headers:{
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(this.state)
        }).then(function(response){
            console.log(response)
            return response.json();
        });

        event.preventDefault();
    }

当提交的表单创建下面的对象时,如何添加反序列化json数据,并在postgres中添加一行?

{
name: Bob,
location: New York, NY,
days: {Mon: true, Tue: false, Wed: true, Thu: false, Fri: true}
}

这就是我到目前为止在python中所拥有的-我具有api_post函数,用于发布来自react的数据,然后具有sqlalchemy模式,该模式指示我希望数据在表中的外观。在这种情况下,如何集成棉花糖库或酸洗以将每个json数据另存为自己的单独列?

#api.py

from flask import Flask, redirect, url_for, request, jsonify
from flask_cors import CORS
import datetime
from flask_sqlalchemy import SQLAlchemy 
from config import DATABASE_URI

app = Flask(__name__)

CORS(app)


app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

#getting the data from React
@app.route('/', methods=['POST'])
def api_post():
    if request.method == 'POST':
        shift = request.json
        db.session.add(jsonify(shift))
        db.session.commit()

#database schema


class Shifts(db.Model):

     __table__ = 'shifts'

     emp_id = db.Column(db.Integer, primary_key=True)
     created_at = db.Column(db.DateTime, default=datetime.datetime.utcnow)
     name = db.Column(db.String, nullable=False)
     location = db.Column(db.String, nullable=False)
     mon = db.Column(db.Boolean, nullable=False)
     tue = db.Column(db.Boolean, nullable=False)
     wed = db.Column(db.Boolean, nullable=False)
     thu = db.Column(db.Boolean, nullable=False)
     fri = db.Column(db.Boolean, nullable=False)
     
     def __init__(self, name, location, mon, tue, wed, thu, fri):
          self.name = name
          self.location = location
          self.mon = mon
          self.tue = tue
          self.wed = wed
          self.thu = thu
          self.fri = fri

db.create_all()

解决方案


通常,您需要先验证用户输入,然后再将其保存到数据库中,但是为了简单起见,我将忽略此部分。

您收到的错误是因为flask会jsonify为您返回标头设置为application / json的Response对象。 request.json应该已经将您的json解析为字典(当它实际上是字典而不是json时,我们将忽略该属性称为json的事实)。

现在,我们已经将用户输入作为字典,我们可以使用它来创建Shifts对象,然后将其添加到数据库中。这是一条路线的示例,其余代码将保持不变:

@app.route('/', methods=['POST'])
def api_post():
    if request.method == 'POST':
        data = request.json
        try:
            shift = Shifts(
              name=data["name"],
              location=data["location"],
              mon=data["mon"],
              tue=data["tue"],
              wed=data["wed"],
              thu=data["thu"],
              fri=data["fri"],
            )
        except KeyError:
            return "missing required value", 400

        db.session.add(shift)
        db.session.commit()

        return "", 201

0

1

2

3

4

5



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/936022/8bed4e296998f347282b/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)