Сделать исходный код из одного блока кода входным для другого блока кода в Emacs org-mode

Я начинаю работать с org-mode и хочу кое-что сделать, кажется, что это возможно, но мне сложно разобраться.

Позвольте мне описать сценарий: у меня есть некоторый код SQL, который я хочу выполнить на удаленном сервере. В настоящее время у меня есть скрипт Python, который принимает код SQL в виде строки и делает это для меня. Без режима org мой рабочий процесс должен начинаться с файла, подобного так:

echo "SELECT name, grade FROM students" >> basic_query.sql 

и тогда я бегу:

$ python run_query.py basic_query.sql    

Чтобы сделать это в настройке режима org, я мог бы создать блок кода для SQL:

#+NAME: basic_query 
#+BEGIN_SRC SQL 
SELECT name, grade FROM students 

#+END_SRC 

И тогда у меня будет блок кода для вызывающей функции python:

#+BEGIN_SRC python :export results
import sql_helper 
query_status = sql_helper.run_query(<<basic_query>>)  

#+END_SRC 

Что я мог бы использовать для создания таблицы, дальнейшей обработки, построения графика и т. Д. Обратите внимание на << >> дело не в этом, очевидно - это просто злоупотребление нотацией, чтобы указать, что я пытаюсь сделать.

1 ответ

Решение

Если вы настроили emacs/org-mode так, чтобы код Python был включен ((python . t) в org-babel-do-load-languages), вы почти у цели, я изменил ваш пример на

#+NAME: basic_query 
#+BEGIN_SRC SQL 
  SELECT name, grade FROM students 
#+END_SRC 

#+BEGIN_SRC python :export results :noweb yes :tangle yes
import sql_helper 
query = """
    <<basic_query>>
    """
query_status = sql_helper.run_query(query)  

#+END_SRC 

Мой питон немного ржавый, но, по крайней мере, если я запутаю это

import sql_helper 
query = """
    SELECT name, grade FROM students 

    """
query_status = sql_helper.run_query(query)

Python больше не жалуется на синтаксис, а на отсутствующий модуль sql_helper...

Другие вопросы по тегам