Форум сайта python.su
Всем доброго. когда я получаю курсор из запроса, я по факту получаю кортеж полей в каждой записи.
Если мне не удобно обращаться по номеру к элементу кортежа (допустим я заранее не знаю по какому номеру будет значени, т.е. мне не известна структура набора, который получен по *-ке) могу ли я как-то обращаться к полю по его имени?
Офлайн
Да. В общем случае 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'
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
Офлайн
Для pyodbc смотрите раздел Selecting Some Data/Select Basics на http://code.google.com/p/pyodbc/wiki/GettingStarted
Офлайн
Спасибо. Сделал функцию получения значения вот так:
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 ''
Офлайн