Skip to content

Commit dc03f59

Browse files
garaudwesm
authored andcommitted
DOC: Write a section about SQL query wrappers to I/O part. close 2541
1 parent dda2363 commit dc03f59

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

doc/source/io.rst

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,3 +1424,98 @@ These, by default, index the three axes ``items, major_axis, minor_axis``. On an
14241424
store.close()
14251425
import os
14261426
os.remove('store.h5')
1427+
1428+
1429+
.. _io.sql:
1430+
1431+
DataBase Queries
1432+
----------------
1433+
1434+
The :mod:`pandas.io.sql` module provides a collection of query wrappers to both
1435+
facilitate data retrieval and to reduce dependency on DB-specific API. There
1436+
wrappers only support the Python database adapters which respect the `Python
1437+
DB-API <http://www.python.org/dev/peps/pep-0249/>`_.
1438+
1439+
Suppose you want to query some data with different types from a table such as:
1440+
1441+
+-----+------------+-------+-------+-------+
1442+
| id | Date | Col_1 | Col_2 | Col_3 |
1443+
+=====+============+=======+=======+=======+
1444+
| 26 | 2012-10-18 | X | 25.7 | True |
1445+
+-----+------------+-------+-------+-------+
1446+
| 42 | 2012-10-19 | Y | -12.4 | False |
1447+
+-----+------------+-------+-------+-------+
1448+
| 63 | 2012-10-20 | Z | 5.73 | True |
1449+
+-----+------------+-------+-------+-------+
1450+
1451+
Functions from :mod:`pandas.io.sql` can extract some data into a DataFrame. In
1452+
the following example, we use `SQlite <http://www.sqlite.org/>`_ SQL database
1453+
engine. You can use a temporary SQLite database where data are stored in
1454+
"memory". Just do:
1455+
1456+
.. code-block:: python
1457+
1458+
import sqlite3
1459+
from pandas.io import sql
1460+
# Create your connection.
1461+
cnx = sqlite3.connect(':memory:')
1462+
1463+
.. ipython:: python
1464+
:suppress:
1465+
1466+
import sqlite3
1467+
from pandas.io import sql
1468+
cnx = sqlite3.connect(':memory:')
1469+
1470+
.. ipython:: python
1471+
:suppress:
1472+
1473+
cu = cnx.cursor()
1474+
# Create a table named 'data'.
1475+
cu.execute("""CREATE TABLE data(id integer,
1476+
date date,
1477+
Col_1 string,
1478+
Col_2 float,
1479+
Col_3 bool);""")
1480+
cu.executemany('INSERT INTO data VALUES (?,?,?,?,?)',
1481+
[(26, datetime(2010,10,18), 'X', 27.5, True),
1482+
(42, datetime(2010,10,19), 'Y', -12.5, False),
1483+
(63, datetime(2010,10,20), 'Z', 5.73, True)])
1484+
1485+
1486+
Let ``data`` be the name of your SQL table. With a query and your database
1487+
connection, just use the :func:`~pandas.io.sql.read_frame` function to get the
1488+
query results into a DataFrame:
1489+
1490+
.. ipython:: python
1491+
1492+
sql.read_frame("SELECT * FROM data;", cnx)
1493+
1494+
You can also specify the name of the column as the DataFrame index:
1495+
1496+
.. ipython:: python
1497+
1498+
sql.read_frame("SELECT * FROM data;", cnx, index_col='id')
1499+
sql.read_frame("SELECT * FROM data;", cnx, index_col='date')
1500+
1501+
Of course, you can specify more "complex" query.
1502+
1503+
.. ipython:: python
1504+
1505+
sql.read_frame("SELECT id, Col_1, Col_2 FROM data WHERE id = 42;", cnx)
1506+
1507+
.. ipython:: python
1508+
:suppress:
1509+
1510+
cu.close()
1511+
cnx.close()
1512+
1513+
.. note::
1514+
1515+
For now, writing your DataFrame into a database works only with
1516+
SQLite. Moreover, the index will currently be dropped.
1517+
1518+
.. todo::
1519+
1520+
- methods list
1521+

0 commit comments

Comments
 (0)