Найти в Дзене
Аналитика данных

Подсветка синтаксиса SQL в Jupyter Notebook

# Импорт нужных библиотек
import duckdb
import pandas as pd
import numpy as np
# Для вывода подсвеченного кода SQL
from rich.console import Console
from rich.syntax import Syntax
console = Console() # Создаем в VRAM БД
conn = duckdb.connect(database=':memory:')
# Функция для запросов в БД
def conn_fn(query_str):
····conn.execute(query_str); # Создаем таблицы в базе данных
query_str = """create table employees (
id integer primary key,
name varchar(50),
city varchar(50),
department varchar(50),
salary integer);""" conn_fn(query_str) query_str = """insert into employees
(id, name, city, department, salary)
values
(24, 'Marina_M', 'Moscow', 'it', 104),
(21, 'Elena_E', 'Samara', 'it', 84),
(22, 'Xenia_X', 'Moscow', 'it', 90),
(25, 'Ivamdam_I', 'Moscow', 'it', 120),
(23, 'Leonid_L', 'Samara', 'it', 104),
(11, 'Daria_D', 'Samara', 'hr', 70),
(12, 'Boris_B', 'Samara', 'hr', 78),
(31, 'Veronika_V', 'Moscow', 'sales', 96),
(33, 'Anna_A', 'Moscow', 'sales', 100),
(32, 'Gregory_G', 'Samara', 'sal
Оглавление

📊Создаем тестовую базу данных

# Импорт нужных библиотек
import duckdb
import pandas as pd
import numpy as np
# Для вывода подсвеченного кода SQL
from rich.console import Console
from rich.syntax import Syntax
console = Console()
# Создаем в VRAM БД
conn = duckdb.connect(database=':memory:')
# Функция для запросов в БД
def conn_fn(query_str):
····conn.execute(query_str);
# Создаем таблицы в базе данных
query_str = """create table employees (
id integer primary key,
name varchar(50),
city varchar(50),
department varchar(50),
salary integer);"""
conn_fn(query_str)
query_str = """insert into employees
(id, name, city, department, salary)
values
(24, 'Marina_M', 'Moscow', 'it', 104),
(21, 'Elena_E', 'Samara', 'it', 84),
(22, 'Xenia_X', 'Moscow', 'it', 90),
(25, 'Ivamdam_I', 'Moscow', 'it', 120),
(23, 'Leonid_L', 'Samara', 'it', 104),
(11, 'Daria_D', 'Samara', 'hr', 70),
(12, 'Boris_B', 'Samara', 'hr', 78),
(31, 'Veronika_V', 'Moscow', 'sales', 96),
(33, 'Anna_A', 'Moscow', 'sales', 100),
(32, 'Gregory_G', 'Samara', 'sales', 96);"""
conn_fn(query_str)
query_str = """create table expenses (
year integer,
month integer,
income integer,
expense integer);"""
conn_fn(query_str)
query_str = """insert into expenses
(year, month, income, expense)
values
(2020, 1, 94, 82),
(2020, 2, 94, 75),
(2020, 3, 94, 104),
(2020, 4, 100, 94),
(2020, 5, 100, 99),
(2020, 6, 100, 105),
(2020, 7, 100, 95),
(2020, 8, 100, 110),
(2020, 9, 104, 104),
(2020, 10, 104, 100),
(2020, 11, 104, 98),
(2020, 12, 104, 106);"""
conn_fn(query_str)

🎨Функция для запросов в БД и подсветки синтаксиса SQL

# Функция для запроса в БД и вывода SQL с подсветкой
def query_fn(query_str):
····# Подсветка SQL
····syntax = Syntax(query_str, "sql", theme="monokai", line_numbers=True, indent_guides=True)
····console.print(syntax)
····# Выполнение и вывод результат запроса
····display(conn.execute(query_str).df())

Доступные темы параметра theme

  • "monokai" — классическая темная (как в VS Code).
  • "dracula" — популярная фиолетово-розовая.
  • "material" — стиль Material Design.
  • "native" — нативная темная.
  • "rrt" — яркая радужная.
  • "vs" — как Visual Studio.
  • "abap" — SAP стиль.
  • "fruity" — яркая фруктовая.
  • "vim" — стиль Vim.
  • "xcode" — как Xcode.

Светлые темы

  • "default" — стандартная светлая.
  • "emacs" — стиль Emacs.
  • "friendly" — дружелюбная светлая.
  • "colorful" — яркая цветная.
  • "autumn" — осенние цвета.
  • "murphy" — чистая светлая.
  • "bw" — черно-белая.
  • "pastie" — пастельные тона.
  • "tango" — Tango цветовая схема.
  • "trac" — лёгкая серая.

💡Дополнительные настройки Syntax

syntax = Syntax(
query_str, # Передаваемая строка
"sql", # Указание языка для подсветки
theme="monokai", # Схема подсветки
line_numbers=True, # Номера строк
start_line=1, # Начальный номер строки
highlight_lines={2, 4}, # Подсветка конкретных строк
line_range=(1, 10), # Показать только строки 1-10
indent_guides=True, # Направляющие отступов
word_wrap=True, # Перенос строк
background_color="default" # Цвет фона
)

🧐Проверка данных в БД

Таблица employees

query_str = """SELECT * FROM employees"""
query_fn(query_str)
-2

Таблица expenses

query_str = """SELECT * FROM expenses"""
query_fn(query_str)
-3

Ранжирование по зарплате. Первые 3 зарплаты в топе

query_str = """WITH rank_empl AS(SELECT name, department, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees),

min_rank AS (SELECT MIN(rank) + 2 FROM rank_empl)

SELECT *
FROM rank_empl
WHERE rank <= (SELECT * FROM min_rank)"""

query_fn(query_str)
-4
# Показываем все таблицы
query_str = "SHOW TABLES;"
query_fn(query_str)
-5

😸 Код на GitHub.