Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве вы Streamlit быстро создаёте отчёт, чтобы заранее собирать отзывы пользователей. Вы используете драйвер mssql-python для Python, чтобы подключиться к базе данных и считывать данные в отчет.
Драйвер mssql-python не требует внешних зависимостей на компьютерах Windows. Драйвер устанавливает все, что требуется с одной pip установкой, что позволяет использовать самую последнюю версию драйвера в новых сценариях без нарушения работы других сценариев, для обновления и тестирования которых у вас нет времени.
Документация | Исходный код mssql-python | Пакет (PyPI) | uv
Предпосылки
Python 3.10 или более поздней версии.
Если у вас еще нет Python, установите среду выполнения Python и диспетчер пакетов pip из python.org.
Не хотите использовать собственную среду? Следуйте инструкциям в разделе Контейнерная и локальная разработка, чтобы создать воспроизводимую среду разработки в devcontainer или GitHub Codespaces.
Visual Studio Code со следующими расширениями:
Интерфейс azure Command-Line (CLI) для проверки подлинности без пароля в macOS и Linux.
Если у вас еще нет
uv, следуйте инструкциям по установке.База данных на SQL Server, База данных SQL Azure или базе данных SQL в Fabric с примерной схемой
AdventureWorks2025и допустимой строкой подключения.
Установите необходимые компоненты для операционной системы
Установите единовременные предварительные условия для операционной системы. Пользователи Windows могут пропустить этот шаг. Для полной информации о платформе см. Установить mssql-python.
apk add libtool krb5-libs krb5-dev libstdc++
Создание базы данных SQL
Создайте или подключитесь к SQL-базе данных на одной из следующих платформ:
Создание проекта и запуск кода
- Создание проекта
- Добавление зависимостей
- Запуск Visual Studio Code
- Обновление pyproject.toml
- Обновление main.py
- Сохранение строки подключения
- Использование uv run для выполнения скрипта
Создание нового проекта
Откройте командную строку в каталоге разработки. Если у вас его нет, создайте новую директорию, например
pythonилиscripts. Избегайте папок на OneDrive, так как синхронизация может мешать управлению виртуальной средой.Создайте новый проект с
uv.uv init rapid-prototyping-qs cd rapid-prototyping-qs
Добавление зависимостей
В том же каталоге установите mssql-pythonи streamlitpython-dotenv пакеты.
uv add mssql-python python-dotenv streamlit
Запустите Visual Studio Code.
В том же каталоге выполните следующую команду.
code .
Обновление pyproject.toml
Откройте файл в редакторе
pyproject.toml. Этот файл содержит метаданные вашего проекта.Обновите значение
description.description = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."Сохраните и закройте файл.
Обновление main.py
Откройте файл с именем
main.py. Он должен быть похож на этот пример.def main(): print("Hello from rapid-prototyping-qs!") if __name__ == "__main__": main()В верхней части файла добавьте следующие импорты перед строкой с
def main().Подсказка
Если в Visual Studio Code возникли проблемы с разрешением пакетов, необходимо обновить интерпретатор для использования виртуальной среды.
from os import getenv from dotenv import load_dotenv from mssql_python import connect, Connection import pandas as pd import streamlit as stМежду импортом и строкой с
def main(), добавьте следующий код.def page_load() -> None: st.set_page_config( page_title="View Data", page_icon=":bar_chart:", layout="wide", initial_sidebar_state="expanded" ) st.title("AdventureWorksLT Customer Order History") SQL_QUERY = """ SELECT c.* FROM SalesLT.Customer AS c INNER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID; """ df = load_data(SQL_QUERY) event = st.dataframe( df, use_container_width=True, hide_index=True, on_select="rerun", selection_mode="single-row" ) customer = event.selection.rows SPEND_QUERY_ALL = """ SELECT soh.OrderDate, SUM(sod.OrderQty), SUM(sod.OrderQty * sod.UnitPrice) AS spend, pc.Name AS ProductCategory FROM SalesLT.SalesOrderDetail AS sod INNER JOIN SalesLT.SalesOrderHeader AS soh ON sod.SalesOrderID = soh.SalesOrderID INNER JOIN SalesLT.Product AS p ON sod.ProductID = p.ProductID INNER JOIN SalesLT.ProductCategory AS pc ON p.ProductCategoryID = pc.ProductCategoryID GROUP BY soh.OrderDate, pc.Name ORDER BY soh.OrderDate, pc.Name; """ SPEND_QUERY_CUSTOMER = """ SELECT soh.OrderDate, SUM(sod.OrderQty), SUM(sod.OrderQty * sod.UnitPrice) AS spend, pc.Name AS ProductCategory FROM SalesLT.SalesOrderDetail AS sod INNER JOIN SalesLT.SalesOrderHeader AS soh ON sod.SalesOrderID = soh.SalesOrderID INNER JOIN SalesLT.Product AS p ON sod.ProductID = p.ProductID INNER JOIN SalesLT.ProductCategory AS pc ON p.ProductCategoryID = pc.ProductCategoryID WHERE soh.CustomerID = ? GROUP BY soh.OrderDate, pc.Name ORDER BY soh.OrderDate, pc.Name; """ if len(customer) == 0: spend_df = load_data(SPEND_QUERY_ALL) else: customer_id = int(df.loc[customer, 'CustomerID'].values[0]) spend_df = load_data(SPEND_QUERY_CUSTOMER, params=(customer_id,)) st.write("Here's a summary of spend by product category over time:") st.bar_chart(spend_df.set_index('ProductCategory')['spend'], use_container_width=True) if len(customer) > 0: st.write(f"Displaying orders for Customer ID: {df.loc[customer, 'CustomerID'].values[0]}") customer_id = int(df.loc[customer, 'CustomerID'].values[0]) SQL_QUERY = """ SELECT * FROM SalesLT.SalesOrderHeader AS soh WHERE soh.CustomerID = ?; """ st.dataframe(load_data(SQL_QUERY, params=(customer_id,)), hide_index=True, use_container_width=True) SQL_QUERY = """ SELECT sod.* FROM SalesLT.SalesOrderHeader AS soh INNER JOIN SalesLT.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID WHERE soh.CustomerID = ?; """ st.dataframe(load_data(SQL_QUERY, params=(customer_id,)), hide_index=True, use_container_width=True)Между импортом и
def page_load() -> None:добавьте этот код._connection = None def get_connection() -> Connection: global _connection if not _connection: load_dotenv() _connection = connect(getenv("SQL_CONNECTION_STRING")) return _connection @st.cache_data def load_data(SQL_QUERY, params=None) -> pd.DataFrame: data = pd.read_sql_query(SQL_QUERY, get_connection(), params=params) return dataНайдите этот код.
def main(): print("Hello from rapid-prototyping-qs!")Замените его этим кодом.
def main() -> None: page_load() if _connection: _connection.close()Сохраните и закройте
main.py.
Сохранение строки подключения
.gitignoreОткройте файл и добавьте исключение для.envфайлов. Ваш файл должен быть похож на следующий пример.# Python-generated files __pycache__/ *.py[oc] build/ dist/ wheels/ *.egg-info # Virtual environments .venv # Connection strings and secrets .envСохраните и закройте
.gitignore.В текущем каталоге создайте новый файл с именем
.env.В файле
.envдобавьте запись для строки подключения с именемSQL_CONNECTION_STRING. Замените заполнители фактическими значениями.SQL_CONNECTION_STRING="Server=<server>;Database=<database>;Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"Строка строка подключения зависит от типа SQL-базы данных, к которой вы подключаетесь. Для База данных SQL Azure или базы данных SQL в Fabric используйте строку подключения ODBC со вкладки строк подключения и настройте тип аутентификации под ваш сценарий. Для получения дополнительной информации о синтаксисе строка подключения см. раздел Connection strings for mssql-python.
Подсказка
На macOS, оба
ActiveDirectoryInteractiveиActiveDirectoryDefaultработают для проверки подлинности Microsoft Entra.ActiveDirectoryInteractiveзапрашивает вход при каждом запуске скрипта. Чтобы избежать повторяющихся запросов при входе, войдите один раз с помощью команды Azure CLIaz loginи используйтеActiveDirectoryDefault.ActiveDirectoryDefaultповторно использует кэшированные учетные данные.
Использование uv run для выполнения скрипта
В окне терминала до или в новом окне терминала, открываемом в том же каталоге, выполните следующую команду.
uv run streamlit run main.pyОтчет откроется на новой вкладке в веб-браузере.
Попробуйте свой отчет, чтобы узнать, как он работает. Если изменить что-либо, сохраните
main.pyи используйте параметр перезагрузки в правом верхнем углу окна браузера.Чтобы предоставить общий доступ к прототипу, скопируйте все файлы, кроме
.venvпапки на другой компьютер. Папка.venvповторно создается при первом запуске.