如何在Jupyter Notebook的三引号字符串中实现SQL语法高亮?
在Jupyter Notebook中实现PySpark SQL字符串的语法高亮
以下是几种不改变字符串属性的前提下,让三引号SQL字符串获得SQL语法高亮的实用方法:
方法1:利用编辑器注释识别技巧
在三引号字符串开头添加SQL注释标记,让Jupyter的语法高亮引擎自动识别为SQL代码:
print('Hello world') sql = """-- sql SELECT myid, myname, CAST(mydate AS DATE) FROM myschema.mytable WHERE something """ execute_sql(sql)
多数Jupyter的语法高亮插件会识别-- sql标记,将整个三引号字符串按SQL规则着色,同时它依然是标准Python字符串,完全不影响后续传给execute_sql调用。
方法2:借助IPython SQL扩展绑定变量
先加载ipython-sql扩展,通过魔法命令编写高亮的SQL并绑定到变量,既保留编写时的SQL高亮,又能得到可直接使用的字符串:
%load_ext sql %sql --save my_query -q SELECT myid, myname, CAST(mydate AS DATE) FROM myschema.mytable WHERE something # 提取SQL字符串到变量 from sqlalchemy import text sql = str(text(my_query)) execute_sql(sql)
编写SQL时是纯SQL语法高亮,最终得到的sql变量依然是普通字符串,可直接用于你的ETL函数调用。
方法3:自定义字符串类实现输出高亮
如果需要在Jupyter中查看变量时也能看到高亮的SQL,可以定义一个继承自str的类,利用Pygments实现渲染高亮:
from pygments import highlight from pygments.lexers import SqlLexer from pygments.formatters import HtmlFormatter from IPython.display import HTML class SQLString(str): def _repr_html_(self): return highlight(self, SqlLexer(), HtmlFormatter(style='default')) # 使用自定义类创建SQL字符串 print('Hello world') sql = SQLString(""" SELECT myid, myname, CAST(mydate AS DATE) FROM myschema.mytable WHERE something """) execute_sql(sql) # 依然可正常作为字符串传入函数
这种方法在Jupyter中显示sql变量时会呈现高亮的SQL样式,同时它本质还是字符串,不影响任何原有逻辑。
内容的提问来源于stack exchange,提问作者Jacob Bayer
相关产品推荐
相关产品推荐

