извлечение ключей словаря python, пар значений в строки или итерируемые ‘key1, key2, …’ и [value1,value2, …]

#postgresql #python-3.x #dictionary #string-formatting

#postgresql #python-3.x #словарь #форматирование строки

Вопрос:

при использовании psycopg2 и postgresql 9.3 требуется, чтобы строка была вставлена в таблицу с использованием следующего синтаксиса:

 cur.execute(
'INSERT INTO customer (name,address) VALUES ('Herman M', '1313 mockingbird lane'))
  

Если данные поступают в словарь {‘name’:’Herman M’,’address’:’1313 mockingbird lane’}, есть ли лучший, более питонистный способ извлечения ключей и значений из словаря по порядку, чем этот:

     fields,values = '',[]
    for k,v in dictionary.items():
        fields = ','.join((fields,k))
        values.append((v))
  

Для того, чтобы сделать это:

     cur.execute(
    "INSERT INTO {} ({}) VALUES {}".format(
        tablename,fields[1:],tuple(values)))
  

Это работает, но после просмотра выступления Раймонда Хеттингера о преобразовании кода в красивый идиоматический python я восприимчив к тому факту, что это некрасиво, и я копирую данные. Есть ли способ получше?

Ответ №1:

Используйте словарь в cursor.execute методе

 insert_query = """
    insert into customer (name, address)
    values (%(name)s, %(address)s)
"""
insert_dict = {
    'name': 'Herman M',
    'address': '1313 mockingbird lane'
}

cursor.execute(insert_query, insert_dict)