Welcome to brunns-row’s documentation!

Convenience wrapper for DB API and csv.DictReader rows, and similar, inspired by Greg Stein’s lovely dtuple module.


Install from Pypi as usual, using pip , tox, or setup.py.


The basic approach is to create a wrapper object from some kind of description - typically a DBAPI cursor’s description, or a csv.DictReader’s fieldnames attribute - then to use the wrapper’s wrap(row) method to wrap each row. wrap(row) returns an object from which you can access the row’s fields as attributes. A couple of simple examples:


cursor = conn.cursor()
cursor.execute("SELECT kind, rating FROM sausages ORDER BY rating DESC;")
wrapper = RowWrapper(cursor.description)
rows = [wrapper.wrap(row) for row in cursor.fetchall()]
for row in rows:
    print(row.kind, row.rating)


reader = csv.DictReader(csv_file)
wrapper = RowWrapper(reader.fieldnames)
rows = [wrapper.wrap(row) for row in reader]
for row in rows:
    print(row.kind, row.rating)

Attributes names are simply the column names where possible, converted to valid identifiers where necessary by replacing invalid characters with “_”s, prefixing any leading numerics with “a_”, and de-duplicating where necessary by adding numeric suffixes.

Indices and tables