Python: импорт JSON файла в поле SQLAlchemy JSON - PullRequest
1 голос
/ 30 апреля 2020

Я относительно новичок в Python, поэтому я надеюсь, что только что пропустил что-то действительно очевидное ... Но все подобные вопросы / ответы здесь, в StackOverflow, кажутся действительно слишком сложными для простой задачи, которую я задаю пытаясь достичь.

У меня есть несколько сотен текстовых файлов, содержащих данные JSON (фактическая структура данных не важна, этот блок ниже просто показывает вам, что у меня есть, фактическая структура данных может сильно отличаться, но они всегда будут действительными JSON данных).

{
    "config": {
        "item1": "value1",
        "item2": "value2"
    },
    "data": [
        {
            "dataA1": "valueA1",
            "itemA2": "valueA2"
        },
        {
            "dataB1": "valueB1",
            "itemB2": "valueB2",
            "itemB3": "valueB3"
        }
    ]
}

Моя модель выглядит примерно так:

class ModelName(db.Model):
    __tablename__ = 'table_name'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    data1 = db.Column(db.JSON)
    data2 = db.Column(db.JSON)

У меня есть несколько столбцов данных здесь , data1 и data2, просто чтобы я мог сделать визуальное сравнение вставленных данных. Конечная модель будет иметь только одно поле данных.

Вот вставка данных, в которой все, кажется, идет не так:

import json

new_record = ModelName(
    name='Foo',
    data1=open('./filename.json').read(),
    data2=json.dumps(open('./filename.json').read(), indent=2)
)
try:
    db.session.add(new_record)
    db.session.commit()
    print('Insert successful')
except:
    print('Insert failed')

Данные, которые заканчиваются на data1 и data2 забит переменными числами \, чтобы избежать двойных кавычек и разрывов строк, плюс он оборачивает всю вставку данных в набор двойных кавычек. В результате данные просто невозможно использовать. Так что в настоящее время мне приходится копировать и вставлять данные в БД вручную, что, хотя эта утомительная задача работает отлично, но это далеко не то, что нужно делать.

Мне не нужно редактировать, манипулировать или делать что-либо с данными любым способом. Я просто хочу прочитать строку JSON из заданного файла и затем вставить ее содержимое в запись в базе данных, то есть это конец истории, ничего больше.

Есть ли действительно нет ПРОСТОЙ способ добиться этого?

1 Ответ

1 голос
/ 01 мая 2020

Когда вы читаете файл, вам нужно json .loads ().
И для этого нет отступа.
Вместо этого сделайте:

    data2=json.loads(open('filename.json').read())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...