fosstodon.org is one of the many independent Mastodon servers you can use to participate in the fediverse.
Fosstodon is an invite only Mastodon instance that is open to those who are interested in technology; particularly free & open source software. If you wish to join, contact us for an invite.

Administered by:

Server stats:

10K
active users

#sqlalchemy

0 posts0 participants0 posts today
James Bennett<p>I have a <a href="https://infosec.exchange/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</span></a> codebase using <a href="https://infosec.exchange/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> Core -- *NOT* ORM -- for its data layer, and I'm currently not happy with the way it's doing data for testing. Who has a pattern for this that they actually like?</p><p>I already have ephemeral per-test-function isolation of the database, so that's taken care of.</p><p>If this were ORM I'd just use something like factory-boy, but the fact that it's Core and doesn't really map neatly to objects the way ORM stuff does rules that out. I think ideally what I'd like is some sort of declarative JSON file format or whatever that lets me provide a mapping of table names to lists of rows to insert into them, and then a pytest fixture that lets me say "load that JSON file for this test". Has anyone written something like that? Do I get to go write my own?</p>
洪 民憙 (Hong Minhee)<p><strong>애플리케이션 개발 측면에서 본 Drizzle ORM 대 Kysely 비교</strong></p> <p><a href="https://hackers.pub/@hongminhee/2025/drizzle-orm-vs-kysely" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">hackers.pub/@hongminhee/2025/d</span><span class="invisible">rizzle-orm-vs-kysely</span></a></p>
Habr<p>Создание анонимного чата в Telegram: Бот с MiniApp интерфейсом. Часть 1 — Бэкенд на FastAPI, Aiogram, Redis и Centrifugo</p><p>Это первая статья из цикла, посвященного разработке телеграм-бота с MiniApp для случайных чатов. В этой части мы сосредоточимся на создании бэкенда, используя современные технологии: FastAPI для разработки API, Redis для хранения данных в реальном времени и Centrifugo для обеспечения мгновенного взаимодействия между пользователями. Сегодня мы подробно разберем архитектуру проекта, настройку серверов и реализацию логики бота. В следующей статье мы переключимся на фронтенд и займемся разработкой MiniApp с использованием фреймворка Vue.js . Это позволит создать интуитивно понятный интерфейс для пользователей, где они смогут настраивать параметры поиска собеседника и общаться в режиме реального времени (Real time).</p><p><a href="https://habr.com/ru/companies/amvera/articles/890976/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/amvera/a</span><span class="invisible">rticles/890976/</span></a></p><p><a href="https://zhub.link/tags/fastapi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>fastapi</span></a> <a href="https://zhub.link/tags/telegram_mini_app" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_mini_app</span></a> <a href="https://zhub.link/tags/telegram_webapp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_webapp</span></a> <a href="https://zhub.link/tags/python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python</span></a> <a href="https://zhub.link/tags/centrifugo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>centrifugo</span></a> <a href="https://zhub.link/tags/centrifugo_v6" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>centrifugo_v6</span></a> <a href="https://zhub.link/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> <a href="https://zhub.link/tags/redis" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>redis</span></a> <a href="https://zhub.link/tags/redis_python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>redis_python</span></a> <a href="https://zhub.link/tags/%D0%B1%D1%8D%D0%BA%D0%B5%D0%BD%D0%B4" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>бэкенд</span></a></p>
Habr<p>LitestarCatsCV. Тренируемся на кошках. Реализация API и работа с данными</p><p>Что вас ждёт: Если в первой части мы заложили фундамент проекта (выбор инструментов, настройка окружения и структура), то здесь мы превратим этот каркас в полноценное API для управления резюме кошек (или людей — как вам ближе). Мы подключим базу данных, добавим тесты, настроим миграции и даже проверим всё в действии. К концу статьи у вас будет рабочее API, которое можно потрогать руками (или лапками 🐾). Полный код доступен на GitHub — ссылка в конце!</p><p><a href="https://habr.com/ru/companies/ntechlab/articles/889022/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/ntechlab</span><span class="invisible">/articles/889022/</span></a></p><p><a href="https://zhub.link/tags/python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python</span></a> <a href="https://zhub.link/tags/python3" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python3</span></a> <a href="https://zhub.link/tags/litestar" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>litestar</span></a> <a href="https://zhub.link/tags/alembic" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>alembic</span></a> <a href="https://zhub.link/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> <a href="https://zhub.link/tags/orm" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>orm</span></a> <a href="https://zhub.link/tags/pytest" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>pytest</span></a> <a href="https://zhub.link/tags/asyncpg" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>asyncpg</span></a></p>
Future Sprog<p>Dear <a href="https://mastodon.nzoss.nz/tags/LazyWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LazyWeb</span></a> and friends,</p><p>I have a lovely normalised database and one column, when fetched back from the database, can have multiple values. I have the standard 3 table many-to-many setup: Table A, table B, and a third Table that has the matching IDs from A and B to do the multi-to-multi.</p><p>How do I fetch this back from the database and present it as a JSON array? Everything seems to suggest using the database to make a delimited string and let clients turn it into an array. Silly.</p><p><a href="https://mastodon.nzoss.nz/tags/SQLAlchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQLAlchemy</span></a></p>
hobbsc<p>i keep finding all sorts of weird tooling in <a href="https://social.sdf.org/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> by way of my coworkers' commits. i didn't realize how many features it has, even after messing with event listeners for a week.</p>
Hacker Charity<p>Just added SQLAlchemy from <span class="h-card" translate="no"><a href="https://hachyderm.io/@zzzeek" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>zzzeek</span></a></span> to our list! From raw SQL nightmares to elegant Python ORM - you've transformed how an entire generation of developers works with databases.</p><p>Thank you for this masterpiece of engineering!<br><a href="https://floss.social/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</span></a> <a href="https://floss.social/tags/SQLAlchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQLAlchemy</span></a> <a href="https://floss.social/tags/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a></p>
Marcos Dione<p>I love this magick:</p><p>```<br>In [1]: import model</p><p>In [2]: model.Tooter<br>Out[2]: model.Tooter</p><p>In [3]: model.Tooter.account<br>Out[3]: &lt;sqlalchemy.orm.attributes.InstrumentedAttribute at 0x7fbf7bd31bc0&gt;</p><p>In [4]: model.Tooter.account == 'foo'<br>Out[4]: &lt;sqlalchemy.sql.elements.BinaryExpression object at 0x7fbf8183a960&gt;<br>```</p><p>:) <a href="https://en.osm.town/tags/python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python</span></a> <a href="https://en.osm.town/tags/SQLAlchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQLAlchemy</span></a> <a href="https://en.osm.town/tags/metaprogramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>metaprogramming</span></a></p>
LavX News<p>SQLite vs PostgreSQL: A Performance Showdown in Real-World Applications</p><p>In a battle between SQLite and PostgreSQL, one developer's quest for optimal performance reveals surprising insights about database capabilities. As applications scale, understanding the nuances of th...</p><p><a href="https://news.lavx.hu/article/sqlite-vs-postgresql-a-performance-showdown-in-real-world-applications" rel="nofollow noopener noreferrer" target="_blank"><span class="invisible">https://</span><span class="ellipsis">news.lavx.hu/article/sqlite-vs</span><span class="invisible">-postgresql-a-performance-showdown-in-real-world-applications</span></a></p><p><a href="https://mastodon.cloud/tags/news" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>news</span></a> <a href="https://mastodon.cloud/tags/tech" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>tech</span></a> <a href="https://mastodon.cloud/tags/PostgreSQL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PostgreSQL</span></a> <a href="https://mastodon.cloud/tags/SQLite" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQLite</span></a> <a href="https://mastodon.cloud/tags/SQLAlchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQLAlchemy</span></a></p>
Albin<p>Holy s*it, I just tried <a href="https://mastodon.social/tags/tortoise" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>tortoise</span></a>-orm for <a href="https://mastodon.social/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</span></a> and my mind is blown away. After using <a href="https://mastodon.social/tags/SQLAlchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQLAlchemy</span></a> for a long time this is like night and day!</p>
Habr<p>Бесконечное хранилище данных в Telegram</p><p>Изучая Aiogram, мне стало понятно, что лимиты для тг-ботов достаточно большие, поэтому с их помощью можно хранить объемные данные Немного покопавшись, я создал библиотеку, для того, чтобы было проще работать с данными</p><p><a href="https://habr.com/ru/articles/878602/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/878602/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python</span></a> <a href="https://zhub.link/tags/aiogram" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>aiogram</span></a> <a href="https://zhub.link/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> <a href="https://zhub.link/tags/telegram" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram</span></a> <a href="https://zhub.link/tags/sqlite" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlite</span></a> <a href="https://zhub.link/tags/%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>хранение_данных</span></a></p>
Aaron Longchamps<p>So in about an hour, I refactored out SQLAlchemy and Pydantic to replace it with SQLModel – and some tests are actually passing already! I continue to appreciate pytest and how easy that makes this kind of effort.</p><p>Starting with the device type class, I'm going to be working on rewriting my "queries" to fit the SQLModel expectations vs what I was using with SQLAlchemy. I'm using the term queries in quotes there since it looks more like I'm calling methods, and I do see some warnings from SQLModel suggesting what I can replace them with.</p><p>From there, I should hopefully be able to simplify my code, classes, data types, tables, and other pieces. That'll most likely be a job for Wednesday.</p><p><a href="https://infosec.exchange/tags/rackroot" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>rackroot</span></a> <a href="https://infosec.exchange/tags/webdev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webdev</span></a> <a href="https://infosec.exchange/tags/backend" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>backend</span></a> <a href="https://infosec.exchange/tags/database" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>database</span></a> <a href="https://infosec.exchange/tags/fastapi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>fastapi</span></a> <a href="https://infosec.exchange/tags/sqlmodel" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlmodel</span></a> <a href="https://infosec.exchange/tags/programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>programming</span></a> <a href="https://infosec.exchange/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> <a href="https://infosec.exchange/tags/pytest" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>pytest</span></a></p>
Honza Javorek<p>Kdybych <a href="https://mastodonczech.cz/tags/juniorguru" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>juniorguru</span></a> dělal znova, možná bych místo <a href="https://mastodonczech.cz/tags/Peewee" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Peewee</span></a> použil <a href="https://mastodonczech.cz/tags/SQLAlchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQLAlchemy</span></a>. Možná spolu s <a href="https://mastodonczech.cz/tags/PyDantic" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PyDantic</span></a>. A možná bych na to použil <a href="https://sqlmodel.tiangolo.com/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">sqlmodel.tiangolo.com/</span><span class="invisible"></span></a> Možná. Kdo ví.</p>
Habr<p>FastAPI и Vue.js 3: телеграм-бот с MiniApp для записи и автоматических уведомлений. Пишем бэкенд</p><p>Сегодня я рад представить новый масштабный проект, в рамках которого мы подробно рассмотрим технологии и подходы, ранее не освещенные в моих статьях. На этот раз мы создадим телеграм-бота с MiniApp (ранее известным как WebApp) — это будет бот с интегрированным мини-сайтом прямо в Telegram. Для реализации проекта мы используем два основных фреймворка: 1. FastAPI — мощный Python-фреймворк, который мы задействуем для разработки API нашего телеграм-бота. Мы рассмотрим уникальный подход, позволяющий создать полноценный бэкенд, который будет закрывать как API-методы, так и функционал телеграм-бота. 2. Vue.js 3 — JavaScript-фреймворк, выбранный за его удобство разработки и возможности создания сложных визуальных элементов. В этой статье мы сосредоточимся на описании бэкенда, а создание приложения на Vue.js 3 будет вынесено на следующую статью.</p><p><a href="https://habr.com/ru/companies/amvera/articles/873108/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/amvera/a</span><span class="invisible">rticles/873108/</span></a></p><p><a href="https://zhub.link/tags/fastapi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>fastapi</span></a> <a href="https://zhub.link/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> <a href="https://zhub.link/tags/sqlalchemy_20" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy_20</span></a> <a href="https://zhub.link/tags/telegram_bot" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_bot</span></a> <a href="https://zhub.link/tags/telegram_bot_api" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_bot_api</span></a> <a href="https://zhub.link/tags/telegram_mini_app" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_mini_app</span></a> <a href="https://zhub.link/tags/telegram_web_app" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_web_app</span></a> <a href="https://zhub.link/tags/telegram_web_app_bot" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>telegram_web_app_bot</span></a> <a href="https://zhub.link/tags/apscheduler" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>apscheduler</span></a> <a href="https://zhub.link/tags/python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python</span></a></p>
Habr<p>Структура FastAPI приложения</p><p>В данной статья я решил описать свой опыт создания шаблона для проектов, использующих FastAPI, SQLAlchemy, Docker</p><p><a href="https://habr.com/ru/articles/871018/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/871018/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/FastAPI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FastAPI</span></a> <a href="https://zhub.link/tags/Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</span></a> <a href="https://zhub.link/tags/Docker" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Docker</span></a> <a href="https://zhub.link/tags/SQLAlchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQLAlchemy</span></a> <a href="https://zhub.link/tags/Alembic" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Alembic</span></a> <a href="https://zhub.link/tags/%D0%A0%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Репозиторий</span></a> <a href="https://zhub.link/tags/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Шаблон</span></a> <a href="https://zhub.link/tags/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Структура</span></a></p>
Thomas Arildsen<p>As an example, I have started using <a href="https://fosstodon.org/tags/SQLAlchemy" class="mention hashtag" rel="tag">#<span>SQLAlchemy</span></a> recently in my daily work. Starting out with a new software library can take a long time reading documentation to get started using it properly.<br />ChatGPT has been very helpful here. I might ask it something like: &quot;I need to represent these two different kinds of objects that have these properties, and I need to be able to track many-to-many relationships between them through foreign keys. How can I achieve this using SQLAlchemy and ORM models?&quot;</p>
Endurain<p>There are a couple of things that I don’t understand here: <br /> 1- if it is a datetime column it does not store TZ info and the date in DB does not have TZ info. So why it is printing a date with TZ? I have another column that stores timezone like “Europe/Madrid”. Is that the reason? I don’t get it.<br /> 2 - if in the DB it is a datetime column shouldn’t SQLAlchemy convert the value to datetime instead of string?</p><p><a href="https://fosstodon.org/tags/Python" class="mention hashtag" rel="tag">#<span>Python</span></a> <a href="https://fosstodon.org/tags/help" class="mention hashtag" rel="tag">#<span>help</span></a> <a href="https://fosstodon.org/tags/MySQL" class="mention hashtag" rel="tag">#<span>MySQL</span></a> <a href="https://fosstodon.org/tags/SQLAlchemy" class="mention hashtag" rel="tag">#<span>SQLAlchemy</span></a> <a href="https://fosstodon.org/tags/boost" class="mention hashtag" rel="tag">#<span>boost</span></a></p>
Endurain<p>Well this is messing with me:</p><p>SQLAlchemy column definition:<br />start_time = Column(DateTime, nullable=False, comment=&quot;Activity start date (DateTime)&quot;)</p><p>SQLAlchemy query:<br />activity_db = (db.query(activities_models.Activity).filter(activities_models.Activity.id == activity_id).first())</p><p>print(type(activity_db.start_time))<br />print(activity_db.start_time)</p><p>First print returns: &lt;class &#39;str&#39;&gt;<br />Second print returns: 2024-11-25T16:49:52+0100</p><p>Boost welcomed 🙃 </p><p>Why?! <a href="https://fosstodon.org/tags/Python" class="mention hashtag" rel="tag">#<span>Python</span></a> <a href="https://fosstodon.org/tags/help" class="mention hashtag" rel="tag">#<span>help</span></a> <a href="https://fosstodon.org/tags/MySQL" class="mention hashtag" rel="tag">#<span>MySQL</span></a> <a href="https://fosstodon.org/tags/SQLAlchemy" class="mention hashtag" rel="tag">#<span>SQLAlchemy</span></a> <a href="https://fosstodon.org/tags/boost" class="mention hashtag" rel="tag">#<span>boost</span></a></p>
Habr<p>Рекурсивные запросы в SQLAlchemy</p><p>Когда возникает необходимость работать с иерархической структурой данных, кажется, что решение давно найдено, ведь подобные задачи уже неоднократно решались. Возможно, даже выбран инструмент, например, Python и SQLAlchemy. Однако, углубляясь в задачу, понимаешь, что вариантов множество, даже в вопросе, как извлечь данные из базы: использовать стратегию selectin для загрузки родительских элементов? Или, возможно, стоит применить joinload? А может, лучше воспользоваться CTE‑запросами, которые рекомендуются в 90% статей? Но насколько CTE действительно эффективно по сравнению с другими методами? Более того, большинство примеров рассматривают ситуации в идеальных условиях, далёких от реальных проектов. В этой статье я рассмотрю основные способы получения иерархической структуры из БД на примере реального многослойного приложения с использованием SQLAlchemy 2.0. Как обычно, есть важные нюансы, о которых редко упоминают, хотя они весьма любопытны. В завершение проведу сравнение производительности всех описанных подходов. Погружаемся</p><p><a href="https://habr.com/ru/companies/domclick/articles/865256/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/domclick</span><span class="invisible">/articles/865256/</span></a></p><p><a href="https://zhub.link/tags/sqlalchemy_20" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy_20</span></a> <a href="https://zhub.link/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> <a href="https://zhub.link/tags/sqlalchemy_%D0%B2%D0%B0%D0%BB%D0%B8%D0%B4%D0%B0%D1%86%D0%B8%D1%8F_%D1%81_pydantic" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy_валидация_с_pydantic</span></a></p>
Julien Riou<p>As a DBA, I always want developers to use database transactions and appropriate levels of locking. Because I'm tired of seeing explicit locking of tables or autocommit enabled.</p><p>BUT, after two days of trying to patch a simple CRUD app to apply my own rules, failing miserably, I just want to remove all this ORM crap and use raw SQL.</p><p>That's it.</p><p>Tomorrow, I will rewrite this monstrosity.</p><p><a href="https://hachyderm.io/tags/python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>python</span></a> <a href="https://hachyderm.io/tags/postgresql" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>postgresql</span></a> <a href="https://hachyderm.io/tags/gino" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>gino</span></a> <a href="https://hachyderm.io/tags/sqlalchemy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>sqlalchemy</span></a> <a href="https://hachyderm.io/tags/json" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>json</span></a></p>