如何读取Jupyter最后一个Markdown单元格内容为字符串,避免SQL查询重复书写
解决方案
有两种常用的可落地方案,都能完全避免SQL内容重复的问题:
方案1:单代码单元格实现「高亮展示+查询执行」(推荐日常使用)
不需要分开创建Markdown和代码单元格,直接在同一个代码单元格内完成SQL的美化输出和执行,导出PDF时内容逻辑完全连贯:
- 首先导入依赖模块:
import pandas as pd from IPython.display import display, Markdown
- 后续查询直接按如下格式编写即可:
# 用多行字符串定义SQL,完全保留格式 query = """ SELECT * FROM table_a AS a LIMIT 10; """ # 自动渲染为带MySQL语法高亮的展示效果 display(Markdown(f'''```mysql {query} ''')) # 直接复用变量执行查询 df = pd.read_sql(query, conn) df
如果高频使用可以封装为工具函数简化调用:
def run_sql_with_display(query, conn): display(Markdown(f'''```mysql {query} ''')) return pd.read_sql(query, conn) # 调用仅需一行 df = run_sql_with_display(""" SELECT * FROM table_a AS a LIMIT 10; """, conn)
方案2:读取现有Markdown单元格的SQL内容
如果已经把所有SQL提前写在了Markdown单元格里,不想调整原有结构,可以通过读取Notebook本身的内容提取SQL:
import json # 替换为当前Notebook的文件名 with open("你的笔记本名称.ipynb", "r", encoding="utf-8") as f: nb_content = json.load(f) all_sql = [] for cell in nb_content["cells"]: if cell["cell_type"] == "markdown": cell_text = "".join(cell["source"]) if "```mysql" in cell_text: # 提取mysql代码块内的内容 start_idx = cell_text.find("```mysql") + len("```mysql") end_idx = cell_text.find("```", start_idx) sql = cell_text[start_idx:end_idx].strip() all_sql.append(sql) # 直接取对应位置的SQL执行即可 df = pd.read_sql(all_sql[0], conn)
内容的提问来源于stack exchange,提问作者Ezer K
相关产品推荐
相关产品推荐

