Найти - Пользователи
Полная версия: Обратится к полям полученного набора по имени
Начало » Базы данных » Обратится к полям полученного набора по имени
1
Vi
Всем доброго. когда я получаю курсор из запроса, я по факту получаю кортеж полей в каждой записи.
Если мне не удобно обращаться по номеру к элементу кортежа (допустим я заранее не знаю по какому номеру будет значени, т.е. мне не известна структура набора, который получен по *-ке) могу ли я как-то обращаться к полю по его имени?
reclosedev
Да. В общем случае cursor.description:
>>> con = somedb.connect(...)
>>> cur = con.cursor()
>>> cur.execute("SELECT * FROM test")
>>> cur.description[0]
Column(name='field', type_code=23, display_size=None, internal_size=4, precision=None, scale=None, null_ok=None)
Т.е. имя столбца:
>>> cur.description[0][0]
'field'
В документации Flask есть пример как перегнать в словарик
def query_db(query, args=(), one=False):
    cur = g.db.execute(query, args)
    rv = [dict((cur.description[idx][0], value)
               for idx, value in enumerate(row)) for row in cur.fetchall()]
    return (rv[0] if rv else None) if one else rv

А в случае с sqlite есть оптимизированная sqlite3.Row для sqlite3.Connection.row_factory
igor
Для pyodbc смотрите раздел Selecting Some Data/Select Basics на http://code.google.com/p/pyodbc/wiki/GettingStarted
Vi
Спасибо. Сделал функцию получения значения вот так:
    def Field(me,FieldID):
        if type(FieldID) is str:
            for i,d in enumerate(me.Cursor.description):
                if d[0]==FieldID: return me.Record[i]
            return ''
        else:
            if FieldID<len(me.Record):  return me.Record[FieldID]
            else: return ''
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB