Python a Postgres: Zastavte stahování tabulky do paměti
SQL může mít pravdu a API stále umírá: unbounded .all(), f-string queries, ORM N+1, nové připojení na požadavek, pandas jako sklad na web boxu. Jak se udržím Python hubený kolem Postgresu v roce 2026.
SQL článek je dotaz. Toto je Python, který to odmítá vrátit. Stále vidím stejnou nehodu: trasa FastAPI, která vypadá čistě, model SQLAlchemy, který vypadá čistě, a 200 MB pracovní sada, protože scalars().all() znamenalo „vše“. Databáze udělala svou práci. Aplikace požádala o CSV skladu.
Už jsem napsal pět tvarů SQL, které používám místo smyčky. Tento kus je obálka: parametry, fond, časový limit a disciplína nesbírat tabulku, protože datový rámec API je vhodný.
1. Skript, který pracoval na 800 řádcích
Místní výpis, pandas, groupby, a to_excel. Pak to někdo nasměruje na produkci „jen pro tuto zprávu“. To není zpráva. To je výpis z primární databáze do procesu, který bude OOM-zabit. Pokud je odpovědí číslo, seznam padesáti řádků nebo soubor, který můžete streamovat, tabulku neshromažďujte. Agregaci napíšu v SQL – nebo materializovaný pohled, pokud je denní – a ponechám Python jako obálku: auth, parametry, formát.
2. f-řetězce nejsou dotazem API
Vytváření objednávek SELECT * FROM WHERE id = {order_id} s f-řetězcem je způsob, jakým darujete databázi. Použijte $1, %(id)s nebo vázané parametry. Každý řidič je má. SQLAlchemy text() je má. LLM, které zřetězí SQL, je stejná chyba s lepším chováním. Stejná rodina: vytváření seznamů IN spojením řetězců. Použijte ANY($1::int[]) nebo správnou vazbu. „Neuniknu“ z toho.
3. ORM N+1, který vypadá jako čistý Python
pro fakturu ve fakturách: faktura.jméno zákazníka je dotaz plus jeden na řádek. selectinload, spojení nebo dotaz na vyhrazený seznam. „Přidám nakladač později“ je stránka se seznamem, která po veletrhu zanikne. Používám ORM pro zápisy, které odpovídají jednotce práce – vytvořte objednávku plus řádky v jedné relaci. Pro stránky seznamů a exporty používám SQL. Hybrid není selhání. ORM, který skrývá čtyři sta dotazů, je.
4. Jedno připojení na požadavek není pool
Otevření psycopg v každém handleru nebo vytvoření enginu uvnitř funkce je způsob, jakým během nasazení stisknete max_connections. Jeden stroj nebo jeden asynchronní fond pro proces. Časový limit při získání. Pokladna, která nemůže přežít čekání, které volá jinou službu. asyncpg nebo psycopg 3 pro horkou cestu, kterou ovládám. SQLAlchemy, pokud tým již přemýšlí v relacích a já potřebuji migrace plus mapu identity. Nezačínám tři ORM, protože výukový program používal Django.
5. Pandas je druhá databáze – zacházejte s ní jako s databází
pandas groupby na dvougigabajtovém rámci je dotaz na sklad, který spustíte na API boxu. Pokud potřebujete pandas, měl by být extrakt již úzký: sloupce, které používáte, den, který potřebujete, KOPIE nebo strana serveru cursor. chunksize existuje. fetchmany existuje. výnos existuje. Mám rád pandas v analytických sešitech. Nelíbí se mi to jako implementace /stats. Ta cesta je SQL plus zadaný diktát.
6. Co vlastně zasílám
Směrovač FastAPI. Ověřené parametry – data, ID pracovního prostoru, limit. Funkce, která spouští jeden parametrizovaný dotaz, často tvary funkce okna z druhého článku. Bazén. Časový limit příkazu, takže špatný plán selže požadavek namísto instance. Bez SELECT *. Žádné tiché .all() v neomezené tabulce. Jedna žádost, jedna transakce, pokud nemám pojmenovaný důvod – pošta k odeslání, předání platby. Izolace zůstává PŘEČTĚTE SE, dokud nebudu moci pojmenovat anomálii, které se bojím.
Závěr: lepidlo je povoleno, druhý sklad nikoliv
Python je nejlepší lepidlo, které mám pro HTTP a úlohy. Stává se drahým, když se vydává za Postgres. Napište dotaz, svažte parametry, streamujte nebo agregujte a udržujte proces malý. Chytrá smyčka může počkat. Databáze už měla lepší – to je druhý článek.
Pronájem na 1 kliknutí
Najměte si mě jako svého vývojáře jedním kliknutím. Začněte bezpečnou Upwork smlouvu na vytvoření vysoce konverzních webových řešení pro vaši firmu.
Jste připraveni diskutovat o svém projektu?
Jsem senior webový inženýr se specializací na React a Next.js – dostupné pro projekty na volné noze po celém světě.
Umístění
Kyjev, Ukrajina
Upwork
Zobrazit profilTelegram
Kontaktujte měViber
Kontaktujte mě