SQLAlchemy - это один из самых популярных ORM для работы с базами данных из Python.
- поддерживат все популярные базы данных
- не привязана к какому-либо фреймворку (как, например, Django ORM)
- поддерживает асинхрон
- позволяет удобно (питонично) делать довольно сложные SQL запросы
15 июля вышла первая версия из ветки 2.0 и это хорошйи повод изучить эту библиотеку если еще не начали.
Подобрал вам ресурсы для изучения:
- Вебинар и урок про новую SQLAlchemy2.0 от Mike Bayer (автор sqlalchemy и alembic ) с онлайн конференции pythonwebconf:
https://www.youtube.com/watch?v=Uym2DHnUEno
- Для тех кто на английском не очень, есть онлайн книга на руссом от https://xn--r1a.website/massonnn_yt.
А так же видео версия:
https://www.youtube.com/watch?v=leeC0fpAY-E&list=PLN0sMOjX-lm5Pz5EeX1rb3yilzMNT6qLM
Лично я использую алхимию в связке с FastAPI и пока всё устраивает
#tricks #libs
- поддерживат все популярные базы данных
- не привязана к какому-либо фреймворку (как, например, Django ORM)
- поддерживает асинхрон
- позволяет удобно (питонично) делать довольно сложные SQL запросы
15 июля вышла первая версия из ветки 2.0 и это хорошйи повод изучить эту библиотеку если еще не начали.
Подобрал вам ресурсы для изучения:
- Вебинар и урок про новую SQLAlchemy2.0 от Mike Bayer (автор sqlalchemy и alembic ) с онлайн конференции pythonwebconf:
https://www.youtube.com/watch?v=Uym2DHnUEno
- Для тех кто на английском не очень, есть онлайн книга на руссом от https://xn--r1a.website/massonnn_yt.
А так же видео версия:
https://www.youtube.com/watch?v=leeC0fpAY-E&list=PLN0sMOjX-lm5Pz5EeX1rb3yilzMNT6qLM
Лично я использую алхимию в связке с FastAPI и пока всё устраивает
#tricks #libs
www.sqlalchemy.org
The Database Toolkit for Python
👍22
Как проверить является ли директория пустой?
Самый простой способ:
Во втором случае мы получаем генератор, который под капотом использует тот же
Теперь представим что в директории 10к файлов
Для того чтобы ускорить проверку лучше воспользоваться функцией os.scandir(). Она работает на много быстрей и возвращает итератор с объектами os.DirEntry.
Чтобы узнать есть ли в директории хоть один файл достаточно использовать функцию
Самый простой способ:
if os.listdir(path):Тоже самое с
...
pathlib
p = Path(path)В первом случае функция
if list(p.iterdir()):
...
os.listdir возвращает полный список файлов. Нам остаётся проверить есть ли там что-либо.Во втором случае мы получаем генератор, который под капотом использует тот же
listdir.Теперь представим что в директории 10к файлов
for i in range(10000):Не сказать, что при наличии SSD это проблема, но когда таких операций много, мы начинаем терять время, особенно с
Path(f'/tmp/test/test{i}.txt').touch()
pathlib.import timeitТо есть мы получаем список всех 10к файлов просто чтобы узнать что там есть файлы. Хотя нам надо узнать есть ли по указанному пути хотя бы один файл.
test_path = '/tmp/test'
count = 1000
>>> timeit.timeit('list(os.listdir(p))', setup=f'import os;p="{test_path}"', number=count)
2.281363710993901
>>> timeit.timeit('list(p.iterdir())', setup=f'from pathlib import Path;p=Path("{test_path}")', number=count)
5.6957218300012755
Для того чтобы ускорить проверку лучше воспользоваться функцией os.scandir(). Она работает на много быстрей и возвращает итератор с объектами os.DirEntry.
Чтобы узнать есть ли в директории хоть один файл достаточно использовать функцию
next()
next(os.scandir(path))Но если директория пустая, то мы получим ошибку. Поэтому добавляем значение по умолчанию и можно использовать конструкцию в условном операторе
if next(os.scandir(path), None):Либо используем функцию
...
any(), так как она завершится сразу после нахождения первого файла или если итератор пуст.if any(os.scandir(path)):Сравним скорость
...
>>> timeit.timeit('next(os.scandir(p), None)', setup=f'import os;p="{test_path}"', number=count)
0.2183076049986994
>>> timeit.timeit('any(os.scandir(p))', setup=f'import os;p="{test_path}"', number=count)
0.21016486900043674
#tricksPython documentation
os — Miscellaneous operating system interfaces
Source code: Lib/os.py This module provides a portable way of using operating system dependent functionality. If you just want to read or write a file see open(), if you want to manipulate paths, s...
👍16❤4