При форматировании моего оператора sql-insert из orderdict данные имеют размер только 1 символ, а не ключ / значение из заказа.

Я пытаюсь вставить заказанный dict в mysql и думаю, что мне не хватает одного простого элемента.

sql_command = """CREATE TABLE asdf ( id INTEGER PRIMARY KEY, description TEXT(100), data_value TEXT(100));"""
cursor.execute(sql_command)
for id, p in enumerate(info):
    format_str = """INSERT INTO asdf (id, description, data_value) VALUES ({id}, '{description}', '{data_value}');"""
    sql_command = format_str.format(id=id, description=p[0], data_value=p[1])
    print(sql_command)

это на самом деле делает 95% того, что я хочу, однако, по какой-то причине, это только печать первых двух букв первого "элемента", поэтому, если "информация" - это данные ниже

OrderedDict([('name', 'bob'), ('favorite food', 'pizza')])

распечатывает следующее

INSERT INTO asdf (id, description, data_value) VALUES (0, 'n', 'a');
INSERT INTO asdf (id, description, data_value) VALUES (1, 'f', 'a');

но я хочу напечатать следующее

INSERT INTO asdf (id, description, data_value) VALUES (0, 'name', 'bob');
INSERT INTO asdf (id, description, data_value) VALUES (1, 'favorite  food', 'pizza');

мысли?

1 ответ

Решение

У вас есть словарь под рукой, enumerate() дает вам index,key словаря, а не значения вашего диктата.

for id, p in enumerate(info):
    format_str = """INSERT INTO asdf (id, description, data_value) VALUES ({id}, '{description}', '{data_value}');"""

    # here are changes
    sql_command = format_str.format(id=id, description=p, data_value=info[p])

должен это исправить.

Ваша индексация p[0] это первый символ вашего key, p[1] второй символ
Замени это p (полный ключ) и info[p] (DICT-доступ для значения).

Другие вопросы по тегам