← Zpět na Blog
·8 min čtení·

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.

PythonPostgreSQLFastAPISQLVýkonInženýrství
Najme si mě na Upwork

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.

Najměte si mě na Upwork

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