2012-01-31 74 views
9

我开始使用org模式,并且有一些我想要做的事情,好像应该可以,但我很难搞清楚。使源代码从一个代码块输入到Emacs org模式中的另一个代码块

让我来描述一下场景:我有一些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 

然后我有蟒蛇一个代码块调用函数:

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

#+END_SRC 

我可能用它来创建表格,进一步处理,绘图等。注意<< >>的事情是不正确的,显然---这只是一种滥用符号来表明我正在尝试做什么。

+2

你可以看一下[此论文](http://www.jstatsoft.org/v46/i03),见[本博文](http://irreal.org/blog/?p=653)。 – Daimrod 2012-01-31 08:41:39

回答

7

如果您已设置的emacs /组织模式,使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 

我的Python是有点生疏,但至少,如果我纠结这

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

    """ 
query_status = sql_helper.run_query(query) 

蟒蛇也​​不再抱怨的语法,而是缺少模块sql_helper ...

+0

完美工作 - 谢谢! – 2012-01-31 17:09:47