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

Я пытаюсь вставить упорядоченный 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 Ответ

0 голосов
/ 28 апреля 2018

У вас есть словарь, 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-доступ для значения).

...