5 ms·
I might be outing myself as a noob here, but... what is the (better) alternative?
by alfons_foobar 2mo ago
I might be outing myself as a noob here, but... what is the (better) alternative?
- 0x696C6961 2mo agoYou inject the pool itself.
- alfons_foobar 2mo 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 2mo 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 2mo 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 2mo 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 2mo agoahh, gotcha! thanks!