使源代码从一个代码块中输入到Emacs组织模式中的另一个代码块

Joh*_*ton 10 emacs literate-programming org-mode

我开始使用org-mode而且我想做的事情似乎应该是可能的,但是我很难搞清楚.

让我来描述一下这个场景:我想要在远程服务器上执行一些SQL代码.我目前有一个python脚本,它将SQL代码作为字符串,并为我这样做.没有org-mode,我的工作流程就是从这样的文件开始:

echo "SELECT name, grade FROM students" >> basic_query.sql 
Run Code Online (Sandbox Code Playgroud)

然后我跑了:

$ python run_query.py basic_query.sql    
Run Code Online (Sandbox Code Playgroud)

要做到这一点,在org-mode设置中,我可以为SQL创建一个代码块:

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

#+END_SRC 
Run Code Online (Sandbox Code Playgroud)

然后我有一个python调用函数的代码块:

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

#+END_SRC 
Run Code Online (Sandbox Code Playgroud)

我可以用它来创建一个表,进一步处理,绘图等.注意<< >>事情是不对的,显然---这只是滥用符号表示我正在尝试做什么.

Tom*_*ner 7

如果您已设置emacs/org-mode以启用python代码((python . t)in 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 
Run Code Online (Sandbox Code Playgroud)

我的python有点生锈,但至少如果我纠结这个

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

    """
query_status = sql_helper.run_query(query)
Run Code Online (Sandbox Code Playgroud)

python不再抱怨语法,但关于缺少的模块sql_helper ...