Вставка словаря в базу данных SQL, созданную с использованием JSON в Python

Я использовал что-то вроде этого:

switch number {
case .int(let n):
    println("integer is \(n)")
case .float(let n):
    println("float is \(n)")
}
0
задан marc_s 13 July 2018 в 13:16
поделиться

2 ответа

Чтобы вставить json в вашу базу данных, не конвертируйте его в объект Python; просто сохраните строку как прочитанную из файла.

with open(peripheralsJsonFile).read() as f:
    peripheralsInfo = f.read()

myquery = """INSERT INTO hw_info(hostname, peripheralsInfo) VALUES(%s,%s)""" 

cursor.execute(myquery, (hostname, peripheralsInfo))

Если вы хотите использовать данные в своей программе позже, вы передадите строку из запроса SELECT через json.loads(), чтобы сделать ее Python object.

EDIT

Два замечания здесь.

  1. prefipheralsInfo = open(peripheralsJsonFile).read() не закрывает файл после чтения, поэтому я использовал контекстный менеджер , который позаботится об этом за кулисами.
  2. Вы форматируете строку запроса, используя интерполяцию строк Python. Это делает вашу программу уязвимой для SQL-инъекций . В моем примере я использую параметр параметризованный запрос , чтобы обойти эту уязвимость. Параметры также помогают убедиться, что ваш вход передан вашей БД в качестве правильного типа данных.
1
ответ дан shmee 17 August 2018 в 13:37
поделиться

Так как это MySql, вы пытаетесь установить поле как TextField и преобразовать JSON в строку и сохранить его. При извлечении вы можете использовать ast.literal_eval(fieldName).

Если вы используете PostgreSql, вы можете использовать JSONField в моделях.

0
ответ дан Nikhil Mohan 17 August 2018 в 13:37
поделиться
  • 1
    OP сказал MS SQL, а не MySql. И почему ast.literal_eval, когда у вас есть строка json? json.loads() гораздо более уместен в этом случае – shmee 13 July 2018 в 06:29
Другие вопросы по тегам:

Похожие вопросы: