在Emacs组织模式下,将一个代码块中的源代码作为另一个代码块的输入
我开始使用组织模式,我想做一些事情,这似乎是可能的,但我很难弄清楚 让我描述一下这个场景:我有一些SQL代码要在远程服务器上执行。我目前有一个python脚本,它将SQL代码作为字符串,并为我执行此操作。如果没有组织模式,我的工作流程将从如下文件开始:在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 要在组织模式
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)