我开始使用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
我可能会用它来创建一个表格,进一步处理,绘制等等。注意<< >>
事情是不对的,显然---这只是滥用符号表示我正在尝试做什么。
答案 0 :(得分:7)
如果您已设置emacs / org-mode以启用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)
python不再抱怨语法,而是关于丢失的模块sql_helper ...