#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)