ipython notebook:自定义单元格和执行钩子

时间:2015-04-27 06:33:58

标签: ipython-notebook

我想覆盖在ipython笔记本中为某些单元格按下运行时会发生什么。

例如,我希望能够直接在单元格中编写SQL查询并定义一个处理它的函数。

似乎应该可以像ipython-notebook extensions那样执行此操作。有谁知道类似的扩展?从ipython直接执行此操作的简单方法是什么?

理想情况下,这将涉及定义自定义单元格类型,但我很乐意使用特殊标记将常用的python代码与自定义SQL查询单元格分开。

1 个答案:

答案 0 :(得分:3)

我曾经有类似的愿望,我最终得到了以下解决方案:

from sqlalchemy import create_engine
import pandas as pd
from IPython.core.magic import register_cell_magic
from IPython import get_ipython
con = create_engine(DB_URL)

@register_cell_magic
def sql(line, cell):
    cell = cell.format(**globals())
    if line.strip() != '-':
        res = pd.read_sql(cell, con)
        if line.strip() != '': get_ipython().user_ns[line.strip()] = res
        return res
    else:
        con.execute(cell)
del sql

您现在可以写入其他单元格:

%sql outputvar
select * from whatever where ...

例如:

Screenshot