To answer "is there anything better", I would suggest that a namedtuple allows you to access the individual data items with minimal fuss:
>>> from collections import namedtuple
>>> Person = namedtuple("Person", ['person_id', 'first_name', 'last_name',
'email', 'birth_date', 'graduation_year',
'home_street', 'home_city', 'home_zip',
'mail_street', 'mail_city', 'mail_zip'])
>>> row = range(12) # dummy data
>>> p = Person(*row) # unpack tuple into namedtuple
>>> p
Person(person_id=0, first_name=1, last_name=2, email=3, birth_date=4, graduation_year=5, home_street=6, home_city=7, home_zip=8, mail_street=9, mail_city=10, mail_zip=11)
>>> p.birth_date
4
This means you access attributes, rather than separate names, but is lighter-weight than building a class, keeps all of the data from your query together and exposes the values through sensible names.