Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mkhaykin/pythoncherkizovo
test Cherkizovo (python + mssql)
https://github.com/mkhaykin/pythoncherkizovo
Last synced: 11 days ago
JSON representation
test Cherkizovo (python + mssql)
- Host: GitHub
- URL: https://github.com/mkhaykin/pythoncherkizovo
- Owner: mkhaykin
- License: mit
- Created: 2024-03-23T13:38:19.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-03-25T18:55:07.000Z (9 months ago)
- Last Synced: 2024-04-02T10:08:14.578Z (9 months ago)
- Language: Python
- Size: 2.49 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pythonCherkizovo
Тестовое задание: [ТЗ](/docs/ТЗ.docx)
Стек:
- Python 3.10: tkinter, pyodbc;
- MS SQL 2017;
- Excel | OpenOffice;
- Docker.## Развертывание
### Переменные среды
Для запуска и тестирования проекта требуется создать файл `.env` с переменными окружения.
Пример файла: [`.env.example`](.env.example)#### Параметры подключения к ms sql:
`MSSQL_SERVER` - ip адрес / имя хоста (например, 127.0.0.1 для локальной установки)
`MSSQL_PORT` - порт (порт по-умолчанию 1433)
`MSSQL_SA_PASSWORD` - пароль пользователя sa (нужен для создания объектов)
`MSSQL_DATABASE`- имя базы (например, TestDB)
`MSSQL_USERNAME`- пользователь базы (например, db_user)
`MSSQL_PASSWORD`- пароль пользователя (например, Q1q)### Скрипт создания объектов
Файл скрипта [db-create.sql](db-create.sql)Необходимо внести изменения в первые 3 строчки: требуется указать те же данные,
что и в `.env` файле.
```
:setvar db_name
:setvar user_uid
:setvar user_pwd
```
Например:
```
:setvar db_name TestDB
:setvar user_uid db_user
:setvar user_pwd Q1q
```### С использованием Docker.
Запускаем
```shell
docker compose up -d
```
Создается 2 контейнера:
- mssql - собственно БД;
- mssql_conf - контейнер для конфигурирования mssql (создание пользователя, таблицы, sp).### Без использования Docker.
Необходимо создать в БД требуемые объекты вручную.
Ссылка на файл скрипта [db-create.sql](db-create.sql)## Запуск приложения:
### Дополнительное ПО:
Для работы с MS SQL использует ODBC Driver 18 for SQL Server.#### Windows
Для установки по Windows следует скачать и установить дополнительное ПО: [Скачивание драйвера ODBC Driver for SQL Server](https://learn.microsoft.com/ru-ru/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver16)#### Linux
```shell
sudo apt install unixodbc-dev
```
Для ubuntu дополнительно:
```shell
if ! [[ "18.04 20.04 22.04 23.04" == *"$(lsb_release -rs)"* ]];
then
echo "Ubuntu $(lsb_release -rs) is not currently supported.";
exit;
ficurl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.listsudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install -y unixodbc-dev
```#### Python
Требования к версии python не выставлялись, поэтому предполагается, что используется версия 3.10
```sh
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python src/main.py
deactivate
```Файл для загрузки `data.xlsb` находится в `./import`
## Ограничения / замечания:
- MS SQL поднимается в docker, без указаний кодировок и прочих настроек, т.е. с кириллицей ~~может~~ точно будет работать некорректно.
Но в текущем задании у нас кириллицы нет (кроме строки 160444 с артикулом "#ошибка", в отчете эта строка фигурирует как "#??????");
- Для создания таблицы / процедуры развертывается отдельный контейнер, он находится в нормально выключенном состоянии;
- Загрузка идет пакетами по 100 записей. Полагаю правильнее было бы грузить
данные bulk-ом;
- Данные загружаются непосредственно в основную таблицу, правильнее было бы загружать их
через временную;
- Тестировалось на linux, под windows может быть что-то пойдет не так ...
- Есть определенные проблемы с фризами в процессе загрузки при открытии about.
Есть откровенные неопрятности в коде, но полагаю для тестового проекта это может быть приемлемо;
- Для чтения данных используется pandas, что в данном проекте избыточно;
- Стоило попробовать организовать работу с БД через sqlalchemy,
но требования к работе через sp, полагаю, делает неактуальными возможности объектной модели.