Skip to main content

RDBMS access via IPython

Project description

ipython-sql

Introduces a %sql / %%sql magic.

Connect to a database, using SQLAlchemy connect strings, then issue SQL commands within IPython or IPython Notebook.

ipython-sql notepad usage screenshot

Examples:

In [1]: %load_ext sql

In [2]: %%sql postgres://will:longliveliz@localhost/shakes
   ...: select * from character
   ...: where abbrev = 'ALICE'
   ...:
Out[2]: [(u'Alice', u'Alice', u'ALICE', u'a lady attending on Princess Katherine', 22)]

In [3]: result = _

In [4]: print(result)
charid   charname   abbrev                description                 speechcount
=================================================================================
Alice    Alice      ALICE    a lady attending on Princess Katherine   22

In [4]: result.keys
Out[5]: [u'charid', u'charname', u'abbrev', u'description', u'speechcount']

In [6]: result[0][0]
Out[6]: u'Alice'

In [7]: result[0].description
Out[7]: u'a lady attending on Princess Katherine'

After the first connection, connect info can be omitted:

In [8]: %sql select count(*) from work
Out[8]: [(43L,)]

Connections to multiple databases can be maintained. You can refer to an existing connection by username@database:

In [9]: %%sql will@shakes
   ...: select charname, speechcount from character
   ...: where  speechcount = (select max(speechcount)
   ...:                       from character);
   ...:
Out[9]: [(u'Poet', 733)]

In [10]: print(_)
charname   speechcount
======================
Poet       733

You may use multiple SQL statements inside a single cell, but you will only see any query results from the last of them, so this really only makes sense for statements with no output:

In [11]: %%sql sqlite://
   ....: CREATE TABLE writer (first_name, last_name, year_of_death);
   ....: INSERT INTO writer VALUES ('William', 'Shakespeare', 1616);
   ....: INSERT INTO writer VALUES ('Bertold', 'Brecht', 1956);
   ....:
Out[11]: []

Connecting

Connection strings are SQLAlchemy standard.

Some example connection strings:

mysql+pymysql://scott:tiger@localhost/foo
oracle://scott:tiger@127.0.0.1:1521/sidname
sqlite://
sqlite:///foo.db

Configuration

Query results are loaded as lists, so very large result sets may use up your system’s memory. There is no autolimit by default.

You can set an autolimit by adding this to your ipython_config.py file:

c.SqlMagic.autolimit = 1000

You can similarly change the table printing style to any of prettytable’s defined styles (currently DEFAULT, MSWORD_FRIENDLY, PLAIN_COLUMNS, RANDOM):

c.SqlMagic.style = ‘PLAIN_COLUMNS’

You can create and find your ipython_config.py file from the command line:

ipython profile create
ipython locate profile

See http://ipython.org/ipython-doc/stable/config/overview.html#configuration-objects-and-files for more details on IPython configuration.

Development

https://github.com/catherinedevlin/ipython-sql

Credits

News

0.1

Release date: 21-Mar-2013

  • Initial release

0.1.1

Release date: 29-Mar-2013

  • Release to PyPI

  • Results returned as lists

  • print(_) to get table form in text console

  • set autolimit and text wrap in configuration

0.1.2

Release date: 29-Mar-2013

  • Python 3 compatibility

  • use prettyprint package

  • allow multiple SQL per cell

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ipython-sql-0.1.2.tar.gz (5.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ipython_sql-0.1.2-py3.2.egg (10.3 kB view details)

Uploaded Egg

ipython_sql-0.1.2-py2.7.egg (10.0 kB view details)

Uploaded Egg

File details

Details for the file ipython-sql-0.1.2.tar.gz.

File metadata

  • Download URL: ipython-sql-0.1.2.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for ipython-sql-0.1.2.tar.gz
Algorithm Hash digest
SHA256 45602466b9d99a86026dbb2ae801b4cba61bd3962342a70299833d35dc1b12dd
MD5 95aca091c27a56f05e21e7044a4ee8e2
BLAKE2b-256 7b997f717ecae64c942e7ab984c217f5d9ab2662dde47c62474f78a475a95f30

See more details on using hashes here.

File details

Details for the file ipython_sql-0.1.2-py3.2.egg.

File metadata

File hashes

Hashes for ipython_sql-0.1.2-py3.2.egg
Algorithm Hash digest
SHA256 2738c7cfd09f693fc1c8930b4f953c6da522c4ded50a949790b787bc79f5a0be
MD5 da9f038fef60b24220379ce09b284143
BLAKE2b-256 2ad6df0f305ab0130f4374a8166959cf4ae7f261bdae0c671319252c0eb27472

See more details on using hashes here.

File details

Details for the file ipython_sql-0.1.2-py2.7.egg.

File metadata

File hashes

Hashes for ipython_sql-0.1.2-py2.7.egg
Algorithm Hash digest
SHA256 a643bb9978ea67f4d519f10bbdd533fb1882a5371b0ea821884608090a84a8f3
MD5 57502c95ec777e3b8a0e499e1ed9dcd5
BLAKE2b-256 43bb6cc63d2cba5409801770bfab7cc7ecdcab6249d61cf9914cb8c7c9d9d1a5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page