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

Pierre GM pgmdevlist@gmail....
Sat Sep 4 07:38:35 CDT 2010


On Sep 4, 2010, at 4:35 AM, John Salvatier wrote:

> 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'


FAIW,
I have some pieces of code to connect ndarrays, MaskedArays and TimeSeries to sql3 databases (read from and write to).
http://projects.scipy.org/scikits/browser/branches/pierregm/hydroclimpy/scikits/hydroclimpy/io/sqlite.py


More information about the NumPy-Discussion mailing list