在Emacs组织模式下,将一个代码块中的源代码作为另一个代码块的输入

在Emacs组织模式下,将一个代码块中的源代码作为另一个代码块的输入,emacs,org-mode,literate-programming,Emacs,Org Mode,Literate Programming,我开始使用组织模式,我想做一些事情,这似乎是可能的,但我很难弄清楚 让我描述一下这个场景:我有一些SQL代码要在远程服务器上执行。我目前有一个python脚本,它将SQL代码作为字符串,并为我执行此操作。如果没有组织模式,我的工作流程将从如下文件开始: echo "SELECT name, grade FROM students" >> basic_query.sql 然后我会跑: $ python run_query.py basic_query.sql 要在组织模式

我开始使用组织模式,我想做一些事情,这似乎是可能的,但我很难弄清楚

让我描述一下这个场景:我有一些SQL代码要在远程服务器上执行。我目前有一个python脚本,它将SQL代码作为字符串,并为我执行此操作。如果没有组织模式,我的工作流程将从如下文件开始:

echo "SELECT name, grade FROM students" >> basic_query.sql 
然后我会跑:

$ python run_query.py basic_query.sql    
要在组织模式设置中执行此操作,我可以为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 
#+BEGIN\u SRC python:导出结果
导入sql\U帮助程序
query\u status=sql\u helper.run\u query()
#+结束(SRC)

我可能会使用它来创建一个表、进一步处理、绘图等。请注意,
这件事显然是不对的——它只是滥用了符号来表示我正在尝试做什么。

如果您设置了emacs/org模式,以便启用python代码(
org babel do load languages
中的
(python.t)
),你就快到了,我把你的例子改成

#+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 

python不再抱怨语法,而是抱怨缺少模块sql\u helper…

您可以查看,如中所示。如果
basic\u query
example
而不是
src
,那么
+BEGIN\u src python:var query=basic\u query
就可以工作了。
import sql_helper 
query = """
    SELECT name, grade FROM students 

    """
query_status = sql_helper.run_query(query)