[Numpy-discussion] Add function for creating recarray from database query?

John Salvatier jsalvati at u.washington.edu
Fri Sep 3 22:35:39 EDT 2010


Hello,

I recently had to get data from a mysql database into a recarray. The result
was not very long but nontrivial to figure out:

def recarray_from_db(db, command):
    """ executes a command and turns the results into a numpy recarray
(record array)"""
    cursor = db.cursor()
    cursor.execute(command)

    column_dtypes = [(col[0], _convert(col[1])) for col in
cursor.description]

    return np.fromiter((tuple (row) for row in cursor), dtype=column_dtypes,
count = cursor.rowcount)

_type_conversions = {decimal.Decimal : float}
def _convert(type):
    try :
        return _type_conversions[type]
    except:
        return type


It uses only the Python database API. Would something like this be a useful
addition to numpy (maybe have it take a cursor object instead of a
connection object)?

I also found the following function useful for results with timedate
columns, since numpy does not yet have a datetime dtype.

def time_column(date, column_name):
    """ makes a string for calculating a time as (decimal) number of days
since a date for a MySQL column. This is because the numpy.datetime datatype
is not well developed."""
    return "TIME_TO_SEC(timediff(" + column_name + ",'" +
str(datetime.strptime(date, date_format)) + "'))/(60*60*24) as " +
column_name
date_format = '%Y-%m-%d'


Best Regards,
John
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20100903/3c02f77b/attachment.html>


More information about the NumPy-Discussion mailing list