我正在嘗試使用 sqlalchemy 和燒瓶將 json 檔案添加到我的 Postgres 資料庫中,但是我遇到了錯誤。我已經在我的 pgadmin 中創建了表 Farmers,但是現在我試圖在 f1 中添加 json 資料。
錯誤:
line 20, in insert_data
f1 = Farmers(farmers={{"W":1000000,"Z":22758,"J1_I":0.66},{"W":3500000,"Z":21374,"J1_I":2.69},{"W":2500000,"Z":14321,"J1_I":0.76},{"W":2500000,"Z":14321,"J1_I":0.76}})
TypeError: unhashable type: 'dict'
upload.py 檔案是:
import os
import flask
from flask_sqlalchemy import SQLAlchemy
from flask import Flask, jsonify, send_from_directory
from sqlalchemy.dialects.postgresql import JSON
APP = Flask(__name__)
APP.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:admin@localhost:5432/flaskwebapp'
db = SQLAlchemy(APP)
class Farmers(db.Model):
id = db.Column(db.Integer, primary_key=True, index=True)
W = db.Column(db.Integer)
Z = db.Column(db.Integer)
J1_I = db.Column(db.Float)
#db.create_all()
def insert_data():
f1 = Farmers(farmers={{"W":1000000,"Z":22758,"J1_I":0.66},{"W":3500000,"Z":21374,"J1_I":2.69},{"W":2500000,"Z":14321,"J1_I":0.76},{"W":2500000,"Z":14321,"J1_I":0.76}})
db.session.add(f1)
db.session.commit()
print('Data inserted to DB!')
insert_data()
Json 陣列物件檔案:
{
"farmers":[ {
"W":1000000,
"Z":22758,
"J1_I":0.66
},
{
"W":3500000,
"Z":21374,
"J1_I":2.69
},
{
"W":2500000,
"Z":14321,
"J1_I":0.76
},
{
"W":2500000,
"Z":14321,
"J1_I":0.76
}]}
有想法該怎么解決這個嗎?
uj5u.com熱心網友回復:
您正在嘗試一次在資料庫中存盤多個物件。為此,您必須為Farmers串列的每個元素創建一個型別的物件。然后,您可以將這些創建的物件存盤在資料庫中。
def insert_data():
# The list of objects with their associated data.
farmers = [
{"W":1000000,"Z":22758,"J1_I":0.66},
{"W":3500000,"Z":21374,"J1_I":2.69},
{"W":2500000,"Z":14321,"J1_I":0.76},
{"W":2500000,"Z":14321,"J1_I":0.76}
]
# An object is created for each record and added to a list.
farmer_objects = [Farmers(**data) for data in farmers]
# The objects created are added to the session.
db.session.add_all(farmer_objects)
# The session is closed and the objects it contains are saved.
db.session.commit()
順便說一句,JSON 檔案包含一個物件,其中包含包含資料的物件串列。該串列可在“農民”鍵下訪問。所以你必須先從加載的檔案中提取串列。
出于某種原因,您試圖傳遞一個字典。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443418.html
標籤:json PostgreSQL 烧瓶
