25.08.08, SQLite, Venv, Phind
Виртуальное окружение и SQLite — это два важных инструмента в разработке на Python. Давайте разберем их взаимодействие и особенности
использования.
Что такое SQLite?
SQLite — это легковесная система управления базами данных без
сервера
. Она хранит все данные в одном файле локально и не требует дополнительной
установки для работы с Python.
Виртуальное
окружение и SQLite
Вот как работает взаимодействие между виртуальным
окружением и SQLite:
Диаграмма показывает основные компоненты, но нужно объяснить потоки данных
и роль каждого компонента более подробно. Это поможет среднему разработчику
лучше понять архитектуру и избежать потенциальных проблем при работе с SQLite в виртуальном окружении.
На
диаграмме показано:
- Виртуальное окружение содержит Python интерпретатор и модуль sqlite3
- SQLite база данных существует в двух местах:
- В памяти приложения (компонент "База
Данных")
- На диске (файл
.db)
- Стрелки показывают двустороннее взаимодействие между
компонентами:
- Python код через sqlite3 взаимодействует с базой данных в памяти
- Изменения
синхронизируются с файловой системой
Настройка и использование
python -m venv myenv
source
myenv/bin/activate # для Linux/Mac
# или
myenv\Scripts\activate # для
Windows
import sqlite3
# Создание подключения к
базе данных
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
try:
# Пример создания таблицы
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
)
''')
# Сохранение изменений
conn.commit()
finally:
conn.close()
Важные особенности работы
- Не требует дополнительной установки в виртуальном
окружении
Расположение файлов базы данных
- Файлы базы данных создаются в текущей рабочей директории
- Убедитесь, что у вашего приложения есть права на
запись в эту директорию
Преимущества использования
- Надежность и
протестированный код
- Минимальный
функционал без лишних зависимостей
- Однофайловая
архитектура упрощает перенос проекта
Ограничения
4.
- Ограниченная
масштабируемость
- Отсутствие
встроенной репликации данных
Рекомендации по использованию
1.
azuremarketplace.microsoft.com
- Легко
переносить между разными окружениями
- Подходит для небольших и средних проектов
- Для продакшена
- Используйте для
однопользовательских приложений
- Хорошо подходит для ресурсов с низким и средним
трафиком
- Удобна для
автономных приложений
Такой подход к работе с SQLite в виртуальном окружении обеспечивает изоляцию проекта и удобство
разработки, сохраняя при этом все преимущества легковесной базы данных.
|
|
В редыдущих постах
мы с Вами обсуждали Применение Виртуальных окружений в Питон. Я такими
оокружениясми не пользовался, а работал в Conda. У меня есть скрипт для SQLite. И у нас возникает великолепная возможность продемонстрировать применение
Виртуальных окружений и SQLite. Итак пишнм
пример Виртуалного окружения. 1. Мы будем работать в WIndows, в Терминале VSCOde. Не в PSW. 2. У нас есть скрипт для Insert нескольких записей в БД SQLite. 3. Необходимо проанализировать script и по содержанию этого скрипта понять какие Пакеты
необходимо установить в нашем виртуальном окружении. КАкая версия Питон нас
устроит. 4. Под Вашу диктовку Мы в Терминале VSCode должны - создать Проект, структуру проекта. - создать в Terminal VsCode виртуальное окружение. - активировать это окружение.
Также показать как это окружение деактивируется. - запустиить скрипт. Он должен
сработать без ошибок. --- Итак вот скрипт , котопый пишет в Базу данных
несколько записей. Поехали. # 1. Создание структуры базы данных from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///trading.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) # Определяем модели class Order(db.Model): id = db.Column(db.Integer, primary_key=True) symbol = db.Column(db.String(10), nullable=False) price = db.Column(db.Float, nullable=False) quantity = db.Column(db.Integer, nullable=False) class Trade(db.Model): id = db.Column(db.Integer, primary_key=True) symbol = db.Column(db.String(10), nullable=False) price = db.Column(db.Float, nullable=False) quantity = db.Column(db.Integer, nullable=False) # Создаем
структуру базы данных with app.app_context(): db.create_all() # 2. Запись данных в таблицу Order with app.app_context(): # Очищаем таблицу, если нужно Order.query.delete() # Создаем новую запись order = Order( symbol='AAPL', price=150.50, quantity=100 ) # Добавляем и сохраняем запись db.session.add(order) db.session.commit() # 3. Запись
данных в таблицу Trade with app.app_context(): # Очищаем таблицу, если нужно Trade.query.delete() # Создаем новую запись trade = Trade( symbol='AAPL', price=150.75, quantity=50 ) # Добавляем и сохраняем запись db.session.add(trade) db.session.commit()
PHIND-70B MODEL
Давайте разберем ваш скрипт и создадим правильную
структуру проекта с виртуальным окружением.
Анализ скрипта
Ваш скрипт использует Flask и SQLAlchemy для работы с SQLite базой данных. Для
его работы нам понадобятся следующие пакеты:
- Flask
- Flask-SQLAlchemy
SQLite сам по себе не требуется устанавливать, так как он
входит в состав стандартной библиотеки Python.
Структура проекта
Для лучшей организации кода создадим следующую структуру:
trading_project/
├── venv/
# Виртуальное окружение
├── app.py #
Основной скрипт
└── trading.db #
База данных
Настройка
виртуального окружения
mkdir
trading_project
cd
trading_project
python -m venv venv
venv\Scripts\activate
После активации вы увидите префикс (venv) в командной строке.
pip install flask flask-sqlalchemy
pip freeze > requirements.txt
Деактивация
окружения
Когда работа закончена, деактивируйте окружение командой:
deactivate
Запуск скрипта
python app.py
Полезные команды
- Проверка списка
установленных пакетов:
pip list
Удаление
виртуального окружения (если нужно):
·
rmdir /s /q venv
Важные замечания
- При работе в VSCode убедитесь, что:
- Открыта папка
trading_project
- Выбран интерпретатор из виртуального окружения (venv)
- Активировано виртуальное окружение перед
выполнением команд
- Если возникнут
ошибки:
- Проверьте, активировано ли окружение (должен быть
префикс (venv))
- Убедитесь, что все зависимости установлены (pip install -r requirements.txt)
- Проверьте права доступа к папке проекта
Теперь у вас есть полностью рабочее окружение для вашего
скрипта SQLite с правильной структурой проекта и всеми необходимыми
зависимостями.
|
|
Все сработало.
спасибо. Ну и вот этот момент. у меня висит это окружение "trade_proj_venv" в каталоге (trade_proj_venv) PS D:\VC25\vspy\Flask\TradeSln\trading_project> Я конечно это окружение закрою, чтобы работать в
других пакетах. И уже потом никогда не вспомню, что у меня оно было. Сейчас я
вижу, что для меня лучше запомнить его так: "(trade_proj_venv) PS D:\VC25\vspy\Flask\TradeSln\trading_project>" и
поместить его куда-нибудь в Каталог вируальных окружений. И так с каждым новым
окружением, что чрезвычайно неудобно. Пойду делать специальный файл для таких
окружений.
PHIND-70B MODEL
Я понимаю вашу проблему! Действительно, отслеживание
множества виртуальных окружений может быть сложным. Давайте рассмотрим
несколько эффективных решений.
Создание файла
окружений в корне проекта
SuggestedOPTION 1
# virtual_environments.md
## Trading
Project
- Название: trade_proj_venv
- Путь:
D:\VC25\vspy\Flask\TradeSln\trading_project\venv
- Зависимости: Flask, Flask-SQLAlchemy
- Назначение: Торговля с
SQLite
## Другие проекты
- [добавлять новые
проекты здесь]
Pros
Централизованное хранение информации
Легко найти нужное окружение
Можно добавить дополнительную информацию
- Простой формат markdown
Cons
Требует ручного обновления
- Нужно помнить про существование файла
Создайте файл virtual_environments.md в корневой папке ваших проектов. Это даст вам
центральный пункт для отслеживания всех окружений. Формат markdown позволяет легко читать и редактировать информацию.
Использование
переменных окружения Windows
OPTION 2
:: Добавьте в файл autoexec.bat или выполните в CMD
setx
VIRTUAL_ENVIRONMENTS=D:\Projects\VirtualEnvs
mkdir %VIRTUAL_ENVIRONMENTS%
:: Для каждого окружения
mklink /J
"%VIRTUAL_ENVIRONMENTS%\trade_proj_venv"
"D:\VC25\vspy\Flask\TradeSln\trading_project\venv"
Pros
Системное решение
Автоматическая активация при загрузке
- Создает ссылки на окружения
Cons
Требует прав администратора
Менее гибкое решение
- Сложнее поддерживать
Это системное решение использует переменные окружения Windows и символические ссылки для организации виртуальных
окружений. Хотя оно более сложное в настройке, оно автоматически доступно после
перезагрузки системы.
Давайте посмотрим, как работает рекомендуемое решение с
файлом документации:
Диаграмма показывает структуру и связи между компонентами, но стоит
добавить практические рекомендации по использованию этого решения, особенно
учитывая опыт пользователя с Conda. Также нужно
объяснить, как это решение интегрируется с существующей работой в VSCode.
Как использовать документацию окружений
- Создайте новое
окружение
- Добавьте
информацию в файл документации
- Убедитесь, что
путь корректный
- Откройте файл
документации
- Найдите нужное
окружение
- Активируйте его командой venv\Scripts\activate
Интеграция с VSCode
Для удобства работы в VSCode можно добавить следующее в настройки settings.json:
{
"terminal.integrated.env.windows": {
"VIRTUAL_ENVIRONMENTS": "D:\\Projects\\VirtualEnvs",
"PATH": "${env:PATH};${workspaceFolder}\\venv\\Scripts"
},
"python.analysis.extraPaths": ["${workspaceFolder}/venv/Lib/site-packages"],
"python.venvPath": "${workspaceFolder}/venv"
}
Преимущества данного подхода
- Централизованное
управление всеми окружениями
- Легкое
переносимость между компьютерами
- Возможность добавления дополнительной информации о
каждом проекте
- Простота поиска
нужного окружения
- Интеграция с VSCode для автоматического определения окружений
Теперь у вас будет полный контроль над всеми виртуальными
окружениями, и вы легко сможете найти нужное окружение при работе над проектом.
|
|
Еще забыл
спрпосить. При такой конфигурации где будет лежать сама БазаДанных ?
PHIND-70B MODEL
При использовании виртуального окружения и Flask-SQLAlchemy, база данных будет создана в корневой папке вашего
проекта. Давайте рассмотрим структуру:
Диаграмма показывает общую структуру, но нужно объяснить конкретные детали
расположения базы данных и как это связано с конфигурацией в коде. Также важно
пояснить, почему база данных находится именно там, где она находится.
Как видно из диаграммы, база данных trading.db будет находиться в корневой папке проекта рядом с файлом
app.py. Это происходит потому, что в вашем коде указан
относительный путь:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///trading.db'
При
таком пути:
- sqlite:/// означает
использование SQLite
- trading.db - это имя файла базы данных
- Отсутствие пути перед именем файла означает, что
база будет создана в текущей рабочей директории
Если вы хотите изменить расположение базы данных, вы
можете указать полный путь:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data/trading.db' # база будет
в папке data
# или
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////D:/Projects/data/trading.db' # абсолютный
путь
При первом запуске скрипта база данных будет
автоматически создана в указанном месте, и все таблицы (orders и trades) будут созданы внутри этой базы данных.
|
|
Ну и последний
вопрос С точки зрения Уважаемого сообщества Питон Окружений Все-таки
предпочтение отдается использовать виртуальные окружения, чем системы типа Conda/Anaconda ?
PHIND-70B MODEL
С точки зрения сообщества Python, виртуальные окружения действительно являются предпочтительным выбором для
большинства проектов. Давайте сравним эти подходы:
Стандартные
виртуальные окружения Python
SuggestedOPTION 1
# Создание окружения
python -m venv myproject_env
# Активация
source myproject_env/bin/activate # Linux/Mac
myproject_env\Scripts\activate # Windows
# Установка зависимостей
pip install requests flask
Pros
Встроены в Python, не требуют дополнительной установки
Легкие и быстрые
в создании
Меньше места на
диске (~50MB)
Проще в освоении
- Стандартизированы в Python
Cons
Нет встроенного
управления пакетами научных вычислений
- Требует отдельной установки бинарных
зависимостей
Стандартные виртуальные окружения - это часть экосистемы Python. Они идеально подходят для веб-разработки, скриптов и
обычных приложений. Как мы видели ранее, они прекрасно работают с SQLite и Flask.
Conda/Anaconda
OPTION 2
# Создание окружения
conda create --name myproject_env python=3.9
# Активация
conda activate myproject_env
# Установка зависимостей
conda install requests flask numpy pandas
Pros
Улучшенное управление бинарными зависимостями
Встроенная
поддержка научных библиотек
- Удобная
установка пакетов из разных источников
Cons
Больше места на
диске (~3GB базовая установка)
Дополнительная сложность установки
- Не является частью стандартного Python
Conda/Anaconda специально разработаны для научных вычислений и данных.
Они отлично справляются с бинарными зависимостями и пакетами типа NumPy, SciPy, Pandas.
Давайте посмотрим, когда какой инструмент лучше
использовать:
Диаграмма показывает процесс выбора, но нужно добавить практические
рекомендации и объяснить, почему сообщество склоняется к виртуальным
окружениям. Также важно учесть опыт пользователя с Conda и дать конкретные рекомендации для перехода.
Почему сообщество предпочитает
виртуальные окружения
- Стандартизация
- Встроены в Python
из коробки
- Официальная документация Python рекомендует их использование
- Стандартный
инструмент для большинства разработчиков
- Простота
использования
- Минимальные
накладные расходы
- Прямолинейная
структура
- Легко
осваивается новыми разработчиками
- Интеграция с
инструментами
- Отличная поддержка в IDE (VSCode, PyCharm)
- Простая интеграция с CI/CD системами
- Стандартные
команды управления
Когда стоит оставаться с Conda
Если вы уже используете Conda, особенно для научных проектов, нет необходимости меняться, если:
- Работаете с
библиотеками машинного обучения
- Используете
специализированные научные пакеты
- Нужна точная
версия бинарных зависимостей
Рекомендации для перехода
Если вы решите перейти на виртуальные окружения:
- Начните с новых
проектов
- Создайте файл документации окружений (как мы
обсуждали ранее)
- Постепенно
переносите существующие проекты
- Используйте pip install вместо conda install
В вашем случае, поскольку вы работаете с Flask и SQLite, переход на виртуальные окружения будет особенно полезен
- они идеально подходят для веб-разработки и не требуют сложных бинарных
зависимостей.
|
|
|
Type your message...
Комментариев нет:
Отправить комментарий