Кратко получить много переменных из SELECT - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть таблица, которая имеет около 50 столбцов. Чтобы извлечь переменные из таблицы, я делаю:

cursor.execute("SELECT * FROM title WHERE vendor_id = '%s'"%vendor_id)
data=cursor.fetchone()
provider, language, type, subtype, vendor_id = data[0], data[1], data[2], data[3], data[4]
etc...

Есть ли способ сделать это более кратко: переменные, которые я хочу определить, также являются именами столбцов. Возможно, что-то вроде (в псевдокоде) -

values=cursor.fetchone; columns=cursor.fetchcolumns()
data = zip(columns, values)

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

select * будет особенно сложным, поскольку вы не знаете, какие столбцы возвращаются в каком порядке. В зависимости от базы данных, которую вы используете, и используемой обертки, вы должны иметь возможность извлекать строки как dict, что позволяет ссылаться на столбцы как на ключи dict в строках.

Например, MySQLdb поддерживает это через DictCursor. Смотри http://www.kitebird.com/articles/pydbapi.html

Для других библиотек они должны предлагать аналогичную функцию.

0 голосов
/ 21 февраля 2012

Вы можете использовать cursor.description, а затем преобразовать результат в dict:

import sqlite3

cnx = sqlite3.connect(r"g:\Python\Test\dabo\turnos\turnos.sqlite")
cur = cnx.execute("select * from Paciente")
rec = cur.fetchone()
fields = [i[0] for i in cur.description]
values = dict(zip(fields, rec))
print values["PacID"], values["PacNombre"]  # ,...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...