我认为您正在尝试以错误的方式解决问题。
首先是的,有可能以一种真正骇人听闻的方式获得相邻的markdown单元,这在无头笔记本执行中是行不通的。
您要执行的 *** 作是使用IPython单元魔术,该魔术允许任意语法,只要该单元以2个百分号开头,后跟一个标识符即可。
通常,您需要SQL单元格。
您可以参考有关细胞魔术的文档,
或者我可以向您展示如何构建它:
from IPython.core.magic import ( Magics, magics_class, cell_magic, line_magic)@magics_classclass StoreSQL(Magics): def __init__(self, shell=None, **kwargs): super().__init__(shell=shell, **kwargs) self._store = [] # inject our store in user availlable namespace under __mystore # name shell.user_ns['__mystore'] = self._store @cell_magic def sql(self, line, cell): """store the cell in the store""" self._store.append(cell) @line_magic def showsql(self, line): """show all recorded statements""" print(self._store) ## use ipython load_ext mechanisme here if distributed get_ipython().register_magics(StoreSQL)
现在,您可以在python单元格中使用SQL语法:
%%sql select * from foo Where QUX Bar
第二个单元格:
%%sqlInsert Cheezburger into Can_I_HAZ
检查我们执行了什么(3个破折号显示了输入/输出定界,您不必键入它们):
%showsql---['select * from foo Where QUX Bar', 'Insert Cheezburger into Can_I_HAZ']
在问题开始时您问了什么:
mysql.query(__mystore[-1])
当然,这确实需要您以正确的顺序执行先前的单元格,没有什么阻止您使用
%%sql语法来命名您的单元格,例如,如果
_store是
dict或更好的是您覆盖的类,则
__getattr__类似于
__getitem__使用点语法访问字段。这留给读者练习,或者最终看一下答案:
@cell_magicdef sql(self, line, cell): """store the cell in the store""" self._store[line.strip()] = cell
然后您可以使用像
%%sql A1set foo TO Bar where ID=9
然后在您的Python单元中
mysql.execute(__mystore.A1)
我也强烈建议看着凯瑟琳Develin
SqlMagic为IPython的,这笔记本要点在GitHub上,实况表演这一切事情。
在您似乎要说的评论中
pig,没有什么可以阻止您拥有
%%pig魔力的。也可以注入Javascript以启用SQL和PIG的正确语法高亮显示,但这超出了此问题的范围。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)