在Emacs org-mode中,将一个代码块的源代码作为另一个代码块的输入。

11

我正在开始学习org-mode,有些事情我想做,似乎应该是可行的,但我很难弄清楚。

让我描述一下场景:我有一些要在远程服务器上执行的 SQL 代码。我目前有一个Python脚本,它接受SQL代码作为字符串并为我执行此操作。如果没有org-mode,我的工作流程将是从以下文件开始:

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

然后我会运行:

$ python run_query.py basic_query.sql    

要在org-mode中完成这个操作,我可以为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 

我希望使用这个来创建表格、进一步处理并绘图等。请注意,<< >> 这个东西不正确,很明显——这只是滥用符号以指示我想要做的事情。


2
你可以查看这篇论文,它出现在这篇博客文章中。 - Daimrod
1个回答

9

如果您已经设置了emacs/org-mode,使得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有点生疏,但至少如果我将它与...纠缠在一起

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

    """
query_status = sql_helper.run_query(query)

Python不再抱怨语法问题,而是关于缺少"sql_helper"模块...


如果 basic_query 而不是 src,那么 #+BEGIN_SRC python :var query=basic_query 就可以工作了。 - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接