You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取Jupyter最后一个Markdown单元格内容为字符串,避免SQL查询重复书写

解决方案

有两种常用的可落地方案,都能完全避免SQL内容重复的问题:

方案1:单代码单元格实现「高亮展示+查询执行」(推荐日常使用)

不需要分开创建Markdown和代码单元格,直接在同一个代码单元格内完成SQL的美化输出和执行,导出PDF时内容逻辑完全连贯:

  1. 首先导入依赖模块:
import pandas as pd
from IPython.display import display, Markdown
  1. 后续查询直接按如下格式编写即可:
# 用多行字符串定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:06:06