5 ms·
Sorry, 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?
by alfons_foobar 2mo ago
Sorry, 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!