4 ms·
You inject the pool itself.
by 0x696C6961 3mo ago
You inject the pool itself.
- alfons_foobar 3mo agoSorry, I am being dense... how does that solve the problem? I still have to get a connection from the pool, I just do it inside the function body now, right? So this @app.get("/users") def get_users(conn = Depends[get_db_conn]): users = conn.execute("SELECT * FROM users") return users would become that instead: @app.get("/users") def get_users(pool = Depends[get_db_pool]): with pool.get_conn() as conn: users = conn.execute("SELECT * FROM users") return users But I still need enough connections in the pool to handle all concurrent requests, no?
- frollogaston 3mo agoThe idea is you only take a connection from the pool when you need to touch the DB, then you give it back immediately. It's very possible that's only a small fraction of the time spent in some handlers. If you inject the connection, you always hold it through the entire request.
- renegade-otter 3mo agoNo - you do not always give it back immediately in many cases as you have a transaction, which cannot "change hands". If a write connection makes consecutive updates to the DB, you must see it through before closing.
- frollogaston 3mo agoI meant you give it back immediately when you're done with it. So usually after you commit, unless you want to hold it longer for some special reasons.
- alfons_foobar 3mo agoahh, gotcha! thanks!