私はあなたが間違った方法で問題を攻撃しようとしていると思います。
まず、ヘッドレスノートブックの実行ではうまくいかない、本当にハックのある方法で隣接するマークダウンセルを取得することができます。
あなたがしたいことは、セルが2パーセント記号で始まり識別子のあとで始まる限り任意の構文を許可するIPythonセルマジックを使用することです。
通常、SQLセルが必要です。
あなたはおよそcells magics または私はそれを構築する方法をお見せすることができますマニュアルを参照してくださいすることができます:今、あなたはあなたのpython細胞内でSQL構文を使用することができます
from IPython.core.magic import (
Magics, magics_class, cell_magic, line_magic
)
@magics_class
class 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)
:
%%sql
select * from foo Where QUX Bar
秒セル:
%%sql
Insert Cheezburger into Can_I_HAZ
私たちが実行したことを確認する(3 dashe sが)あなたがそれらを入力する必要はありません、入力/出力の区切りを示しています。
%showsql
---
['select * from foo Where QUX Bar', 'Insert Cheezburger into Can_I_HAZ']
そして、あなたがあなたの問題の冒頭で尋ねた:もちろん
mysql.query(__mystore[-1])
これは、あなたが実行することを要求しませんたとえば、_store
がの場合は__getattr__
を上書きするクラスは、ドット構文のフィールドにアクセスする場合は__getitem__
のように振る舞うように、正しいセルの順序で、前のセルを%%sql
という構文で使用することはできません。これは、応答の読者への課題、あるいはエンド見るように残っている:あなたは、あなたのPythonの細胞内
%%sql A1
set foo TO Bar where ID=9
そしてようなSQLの細胞を使用することができます
@cell_magic
def sql(self, line, cell):
"""store the cell in the store"""
self._store[line.strip()] = cell
mysql.execute(__mystore.A1)
私はまた、Catherine Develin SqlMagicをIPythonに、そしてこのNotebook gistをGitHubに見ることを強くお勧めします。
pig
を追加したいと思うコメントでは、%%pig
の魔法も持っていないことを何も妨げていません。また、SQLとPIGの正しい構文強調表示を有効にするためにJavascriptを挿入することもできますが、それはこの質問の範囲を超えています。
「これはできますか?」と尋ねることから始めます。私はこれが明らかだとは思わない。 – cel
ある意味では、私たちはいつも '.ipynb'フォーマットを自分自身で解釈して解釈し、セルの内容を読むことができます –
これで何を達成しようとしていますか? –