【问题标题】:Inserting JSON into postgresql from Flask-Sql Alchemy从 Flask-Sqlalchemy 将 JSON 插入 postgresql
【发布时间】:2020-11-24 12:56:29
【问题描述】:

我想从烧瓶中将 JSON 类型的数据插入 PostgreSQL 数据库中

例如:{"a":[1,2,3] , "b":[1,2,3]}

此类数据的一个示例是 Phone.no 和 Childrens,一个人可以有多个 ph.no 和 Childrens

在烧瓶视图中


@app.route('/add', methods=['POST']) 
def addRex(): 
Name = request.form[‘name’] 
data = request.get_json(force=False, silent=False, cache=True)
p = Projects(name=name,data = data) 
db.session.add(p) 
db.session.commit()

在 HTTP post 方法中

def addData(): 
name = input ('Enter Name :') 
data = input('Enter Data :') 
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
r = requests.post(localhost:5000/add, 
data ={'name':name}, json={'data':data}) 
if (r.status_code == 200):print(' Added Successfully!!') else:print('Already exists!') 

如何将flask中的此类数据插入postgresql。

如果有人可以帮助我解决我的问题。

提前致谢

【问题讨论】:

    标签: postgresql flask flask-sqlalchemy postgresql-json


    【解决方案1】:

    从 sqlalchemy 方言中,您可以为 Postgres 选择 JSON。这是一个例子,

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from sqlalchemy.dialects.postgresql import JSON
    
    app = Flask(__name__)
    
    app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://username:password@localhost:5432/db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    
    db = SQLAlchemy(app)
    
    
    class Person(db.Model):
        person_name = db.Column(db.Text, primary_key=True)
        details = db.Column(JSON)
    
    
    # db.create_all() ==> for creating the db
    
    per_1 = Person(person_name='Batman', details={"phone_no": [5, 6, 7, 8, 9], "children": {"son": [
                   "Dick Grayson", "Jason Todd", "Damian Wayne", "Tim Drake"], "daughter": ['Helena Wayne']}})
    db.session.add(per_1)
    db.session.commit()
    

    【讨论】:

    • 感谢您的回答,它帮助了我,但仍然存在一个问题,当我尝试通过 API 发布请求(如 curl 或其他内容)输入这些详细信息时,JSON 会转换为字符串,如 '{ "a":[1,2,3] , "b":[1,2,3]}',我已经检查了列类型是JSON
    • 你能告诉你是如何在 curl 或 post 方法中传递数据的
    • curl -d "data={'a':[1,2,3],'b':[1,2,3]}" localhost:5001/data -X POST, 我甚至尝试从 python HTTP post 请求传递数据,它仍然以字符串的形式。
    • 添加这个 -H "Content-Type: application/json".. 参考stackoverflow.com/questions/7172784/…
    • data = request.get_json(force=False, silent=False, cache=True) 当在视图上执行此操作并从 HTTP 发布请求添加数据时,插入数据库的数据为空
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 2017-05-04
    • 2014-03-25
    • 2013-06-20
    • 2014-07-15
    • 2016-12-09
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多