Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этом кратком руководстве вы используете Streamlit, чтобы быстро создать отчет, что позволит быстро собирать отзывы пользователей и убедиться, что вы находитесь на правильном пути. Вы используете драйвер mssql-python для Python, чтобы подключиться к вашей базе данных и считываете загруженные в отчет данные.
Драйвер mssql-python не требует внешних зависимостей на компьютерах Windows. Драйвер устанавливает все, что требуется с одной pip установкой, что позволяет использовать самую последнюю версию драйвера в новых сценариях без нарушения работы других сценариев, для обновления и тестирования которых у вас нет времени.
Документация mssql-python | , исходный код mssql-python | , пакет (PyPi) | , uv
Предпосылки
Python 3
Если у вас еще нет Python, установите среду выполнения Python и менеджер пакетов Python Package Index (PyPI) из python.org.
Предпочитаете обходиться без использования собственной среды? Откройте в качестве контейнера для разработки с помощью GitHub Codespaces.
Visual Studio Code со следующими расширениями:
Если у вас еще нет
uv, установитеuv, следуя инструкциям из https://docs.astral.sh/uv/getting-started/installation/.База данных на SQL Server, Azure SQL Database или базе данных SQL в Fabric с примерной схемой
AdventureWorks2025и допустимой строкой подключения.Установите единовременные предварительные условия для операционной системы.
apk add libtool krb5-libs krb5-dev
Создание базы данных SQL
Для этого быстрого старта требуется упрощенная схема AdventureWorks2025 в Microsoft SQL Server, базе данных Fabric SQL или базе данных Azure 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 = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."Сохраните и закройте файл.
Обновление main.py
Откройте файл с именем
main.py. Он должен быть похож на этот пример.def main(): print("Hello from rapid-protyping-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] c inner join SalesLT.SalesOrderHeader soh on c.CustomerId = soh.CustomerId;""" df = load_data(SQL_QUERY) event = st.dataframe( df, width='stretch', hide_index=True, on_select="rerun", selection_mode="single-row" ) customer = event.selection.rows if len(customer) == 0: SQL_QUERY = """select soh.OrderDate, SUM(sod.OrderQty), SUM(sod.OrderQty * sod.UnitPrice) as spend, pc.Name as ProductCategory from SalesLT.SalesOrderDetail sod inner join SalesLt.SalesOrderHeader soh on sod. salesorderid = soh.salesorderid inner join SalesLt.Product p on sod.productid = p.productid inner join SalesLT.ProductCategory pc on p.ProductCategoryID = pc.ProductCategoryID GROUP BY soh.OrderDate, pc.Name ORDER BY soh.OrderDate, pc.Name;""" else: SQL_QUERY = f"""select soh.OrderDate, SUM(sod.OrderQty), SUM(sod.OrderQty * sod.UnitPrice) as spend, pc.Name as ProductCategory from SalesLT.SalesOrderDetail sod inner join SalesLt.SalesOrderHeader soh on sod. salesorderid = soh.salesorderid inner join SalesLt.Product p on sod.productid = p.productid inner join SalesLT.ProductCategory pc on p.ProductCategoryID = pc.ProductCategoryID where soh.CustomerID = {df.loc [customer, 'CustomerID'].values[0]} GROUP BY soh.OrderDate, pc.Name ORDER BY soh.OrderDate, pc.Name;""" st.write("Here's a summary of spend by product category over time:") st.bar_chart(load_data(SQL_QUERY).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]}") SQL_QUERY = f"""SELECT * FROM [SalesLT].[SalesOrderHeader] soh WHERE soh.CustomerID = {df.loc[customer, 'CustomerID'].values[0]};""" st.dataframe(load_data(SQL_QUERY), hide_index=True, width='stretch') SQL_QUERY = f"""SELECT sod.* FROM [SalesLT].[SalesOrderHeader] soh INNER JOIN SalesLT.SalesOrderDetail sod on soh.SalesOrderId = sod.SalesOrderId WHERE CustomerID = {df.loc[customer, 'CustomerID'].values[0]};""" st.dataframe(load_data(SQL_QUERY), hide_index=True, width='stretch')Между импортом и
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) -> pd.DataFrame: data = pd.read_sql_query(SQL_QUERY, get_connection()) return dataНайдите этот код.
def main(): print("Hello from rapid-protyping-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В текущем каталоге создайте новый файл с именем
.env.В файле
.envдобавьте запись для строки подключения с именемSQL_CONNECTION_STRING. Замените пример фактическим значением строки подключения.SQL_CONNECTION_STRING="Server=<server_name>;Database={<database_name>};Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"Подсказка
Строка подключения, используемая здесь, в значительной степени зависит от типа базы данных SQL, к которой вы подключаетесь. Если вы подключаетесь к базе данных SQL Azure или базе данных SQL в Fabric, используйте строку подключения ODBC на вкладке строк подключения. Возможно, вам потребуется настроить тип проверки подлинности в зависимости от вашего сценария. Дополнительные сведения о строках подключения и их синтаксисе см. в справочнике по синтаксису строки подключения.
Использование uv run для выполнения скрипта
Подсказка
Чтобы использовать проверку подлинности Microsoft Entra в macOS, необходимо войти в систему с помощью расширения Azure Repos в Visual Studio Code или запустив az login через интерфейс командной строки Azure (CLI).
В окне терминала до или в новом окне терминала, открываемом в том же каталоге, выполните следующую команду.
uv run streamlit run main.pyОтчет откроется на новой вкладке в веб-браузере.
Попробуйте свой отчет, чтобы узнать, как он работает. Если изменить что-либо, сохраните
main.pyи используйте параметр перезагрузки в правом верхнем углу окна браузера.Чтобы предоставить общий доступ к прототипу, скопируйте все файлы, кроме
.venvпапки на другой компьютер. Папка.venvповторно создается при первом запуске.
Следующий шаг
Посетите репозиторий mssql-python драйверов GitHub, чтобы получить дополнительные примеры, чтобы внести идеи или сообщить о проблемах.