मुझे लगता है कि आप गलत तरीके से समस्या पर हमला करने की कोशिश कर रहे हैं।
सबसे पहले, वास्तव में हैकिश तरीके से आसन्न मार्कडाउन सेल प्राप्त करना संभव है जो हेडलेस नोटबुक निष्पादन में काम नहीं करेगा।
आप जो करना चाहते हैं वह आईपीथॉन सेल मैजिक का उपयोग करना है, जो तब तक मनमाने ढंग से वाक्यविन्यास की अनुमति देता है जब तक सेल 2 प्रतिशत संकेतों के साथ शुरू होता है, जिसके बाद पहचानकर्ता होता है।
आमतौर पर आप SQL कक्ष चाहते हैं।
आप दस्तावेज़ देखें सकते हैं के बारे cells magics या मैं तुम्हें दिखाता कैसे निर्माण करने के लिए है कि कर सकते हैं:
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 सिंटैक्स का उपयोग कर सकते हैं:
%%sql
select * from foo Where QUX Bar
एक दूसरे सेल:
%%sql
Insert Cheezburger into Can_I_HAZ
जांचें कि हमने क्या निष्पादित किया है (3 दाशे रों इनपुट/आउटपुट परिसीमन दिखाने के लिए, आप उन्हें टाइप करने के लिए) की जरूरत नहीं है:
%showsql
---
['select * from foo Where QUX Bar', 'Insert Cheezburger into Can_I_HAZ']
और आप अपने सवाल में शुरुआत में क्या पूछा:
mysql.query(__mystore[-1])
निश्चित रूप से यह आवश्यकता है कि आप निष्पादित सही क्रम में पिछली कोशिकाएं, आपको सिंटैक्स का उपयोग करने से रोकने के लिए कुछ भी नहीं रोकता है, उदाहरण के लिए _store
dict
है, या __getattr__
को ओवरराइट करने के लिए __getattr__
को ओवरराइट करें, __getitem__
जैसे डॉट सिंटैक्स वाले फ़ील्ड तक पहुंचने के लिए।यह पाठक के लिए एक व्यायाम, या प्रतिक्रिया के अंत देखने के रूप में छोड़ दिया जाता है:
@cell_magic
def sql(self, line, cell):
"""store the cell in the store"""
self._store[line.strip()] = cell
आप तो जैसे
%%sql A1
set foo TO Bar where ID=9
और फिर अपने अजगर कोशिकाओं में एसक्यूएल सेल का उपयोग कर सकते
mysql.execute(__mystore.A1)
मैं दृढ़ता से सुझाव देता हूं कि IPython के लिए कैथरीन डेवेलिन एसक्लमैजिक को देखें, और यह Notebook gist गिटहब पर दिखाएगा जो यह सब कुछ लाइव दिखाता है।
टिप्पणी में आपको लगता है कि आप pig
जोड़ना चाहते हैं, तो आपको %%pig
जादू न होने से रोकें। SQL और PIG के सही सिंटेक्स हाइलाइटिंग को सक्षम करने के लिए जावास्क्रिप्ट को इंजेक्ट करना भी संभव है, लेकिन यह इस प्रश्न के दायरे से बाहर है।
मैं पूछ सकता हूं कि 'क्या यह किया जा सकता है?'। मुझे नहीं लगता कि यह स्पष्ट है। – cel
यह एक तरफ या किसी अन्य तरीके से संभव है, हम हमेशा '.ipynb' प्रारूप को आजमा सकते हैं और व्याख्या कर सकते हैं, और सेल सामग्री –
पढ़ सकते हैं, मैं पूछ सकता हूं कि आप इसके साथ क्या हासिल करने की कोशिश कर रहे हैं? –