5

I'm not a programmer, I do this purely as a hobby..

I found a way to save numpy array in to sqlite database

import sqlite3
import numpy

# Array of 4 columns and 100 rows
data = numpy.random.rand(100, 4)

# Create a sample database
conn = sqlite3.connect('sample.db')
cursor = conn.cursor()

# Create a new table with four columns
cursor.execute('''create table data (field1 real, field2 real, field3 real,    field4 real)''')
conn.commit()

# Insert the data array into the 'data' table
cursor.executemany('''insert into data values (?, ?, ?, ?)''', map(tuple,    data.tolist()))
conn.commit()
cursor.close()
conn.close()

But I have a problem about finding a way to reverse the process.. I want to load data from database in numpy array.. Some suggestion where to find a simple example?

0

1 Answer 1

7

Just fetch all the values. That gives you a list of tuples. np.array() takes you back to the original array:

In [12]: cursor.execute('SELECT * from data')
Out[12]: <sqlite3.Cursor at 0xaf8e9d60>
In [13]: alist = cursor.fetchall()
In [14]: len(alist)
Out[14]: 100
In [15]: alist[0]
Out[15]: 
(0.3327498114993416,
 0.6164620040846208,
 0.5099007559772143,
 0.7808234554641948)
In [16]: data1 = np.array(alist)
In [17]: np.allclose(data, data1)
Out[17]: True

The fact that it's a list of tuples doesn't matter. It's just as good as a list of lists.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.