On 8/27/07, Sean Davis <[EMAIL PROTECTED]> wrote:
>
> I have a numpy recarray that I want to load into a database using insert
> statements. To do so, I need to convert each record to a tuple. Here is
> what I get (using psycopg2)
>
> In [1]: a[1]
> Out[1]: ('5151_0023_0001', 'FORWARD', 'interval rank', 'target_tm: 76.00
> ;probe_tm:70.90;freq:27.93;count:01;rules:0000;score:0658',
> 'chr3:1-199501827',
> 'AAAGGAATTCCATTCATCTCTGGATATTTTGAAATCATTAGGGCAAACAATAAATAA', 0L, 171449529L,
> 171449529L, 1L, 23L, 'experimental', 'CHR03P006149104', 6149104L, 5151L,
> 23L, 1L)
>
> In [2]: type(a[1])
> Out[2]: <class 'numpy.core.records.record'>
>
> In [3]: sqlcommand
> Out[3]: 'insert into nbl_tmp values
> (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
>
> In [4]: cur.execute(sqlcommand,tuple(a[1]))
>
> ---------------------------------------------------------------------------
> <class 'psycopg2.ProgrammingError'> Traceback (most recent call
> last)
>
> /sherlock/sdavis/Documents/workspace/svn/watson/Sean/PythonCode/<ipython
> console> in <module>()
>
> <class 'psycopg2.ProgrammingError'>: can't adapt
>
> In [5]: b=('5151_0023_0001', 'FORWARD', 'interval rank', 'target_tm: 76.00
> ;probe_tm:70.90;freq:27.93;count:01;rules:0000;score:0658',
> 'chr3:1-199501827',
> 'AAAGGAATTCCATTCATCTCTGGATATTTTGAAATCATTAGGGCAAACAATAAATAA', 0L, 171449529L,
> 171449529L, 1L, 23L, 'experimental', 'CHR03P006149104', 6149104L, 5151L,
> 23L, 1L)
>
> In [6]: cur.execute(sqlcommand,b)
>
> In [7]: a[1].dtype
> Out[7]: dtype([('PROBE_DESIGN_ID', '|S40'), ('CONTAINER', '|S40'),
> ('DESIGN_NOTE', '|S80'), ('SELECTION_CRITERIA', '|S80'), ('SEQ_ID', '|S40'),
> ('PROBE_SEQUENCE', '|S100'), ('MISMATCH', '<u8'), ('MATCH_INDEX', '<u8'),
> ('FEATURE_ID', '<u8'), ('ROW_NUM', '<u8'), ('COL_NUM', '<u8'),
> ('PROBE_CLASS', '|S40'), ('PROBE_ID', '|S40'), ('POSITION', '<u8'),
> ('DESIGN_ID', '<u8'), ('X', '<u8'), ('Y', '<u8')])
>
> Why does the casting using tuple() not work while cut-and-paste of the
> a[1] record into a new variable works just fine?
I answered part of the question myself. In the coercion back to tuple from
a record, the datatypes remain numpy datatypes. Is there a way to convert
back from numpy datatypes to standard python types (string, int, float,
etc.) without needing to check every numpy type and determine the
appropriate python type? In other words, is there a single function that I
can feed a numpy type to (or a variable that has a numpy type) and have the
standard python type (or an appropriately-coerced variable)?
Thanks,
Sean
_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion