我有一個問題你們也許可以回答。
我有一個看起來像這樣的 json 檔案:
[
{
"address": "some address",
"full_time_school": false,
"name": "some name",
"official_id": "722154",
"school_type": "Grundschule",
"school_type_entity": "Grundschule",
"state": "BW"
},
{
"address": "some other address",
"name": "some other name",
"official_id": "722190",
"state": "BW"
}
]
關鍵是不是每個條目都有所有的鍵。
我有一個看起來像這樣的flask-sqlalchemy模型:
class School(db.Model):
__tablename__ = "school" # pragma: no cover
address = db.Column(db.String)
full_time_school = db.Column(db.Boolean)
name = db.Column(db.String)
official_id = db.Column(db.Integer)
school_type = db.Column(db.String)
school_type_entity = db.Column(db.String)
state = db.Column(db.String)
def __repr__(self):
return f"<name {self.name}"
我有一個 python 腳本將 json 條目添加到我的 postgresql 資料庫中,如下所示:
from my_project import db
from my_project.models import School
import json
import os
# insert data
for filename in os.listdir("datamining"):
if filename.endswith(".json"):
file = open(os.path.join("datamining", filename))
print(f"Add schools from {filename.strip('.json')}")
data = json.load(file)
cleaned_data = {school["official_id"]: school for school in data}.values()
print(f"Adding {len(data)} schools to the database.")
for school in cleaned_data:
entry = School(
id=school["official_id"]
)
for key, value in school.items():
entry.key = value
db.session.add(entry)
db.session.commit()
file.close()
print("Added all schools!!!")
我不知道為什么,但不知何故,除了official_id欄位之外,每個單元格都是 NULL 。我該如何解決這個問題?我現在是在我的智慧的盡頭。非常感謝每一個指標或幫助。
編輯:到目前為止我發現的是,這entry.key并沒有被解釋entry.state為例如,但實際上創建了一個參考entry.key = "BW"。這是為什么?
uj5u.com熱心網友回復:
你的問題是
entry.key = value
您只是將您的值一遍又一遍地寫入模型中的屬性“鍵”中School。我真的很驚訝 SQLAlchemy 沒有在這里引發某種錯誤......只需將所有值傳遞給建構式,你應該沒問題:
school["id"] = school.pop("official_id")
entry = School(**school)
編輯:它是“BW”,因為這恰好是寫入屬性的最后一個值。
uj5u.com熱心網友回復:
通過執行這個本地引數化查詢,將 JSON 檔案的文本內容作為引數傳遞,您可以一次性更輕松、更快速地完成這項作業jsontext:
insert into school
select * from jsonb_populate_recordset(null::school, :jsontext::jsonb);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380946.html
標籤:Python json 蟒蛇-3.x PostgreSQL的 烧瓶-sqlalchemy
