Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Oh wow. Dep injection for DB connections is nasty.


I might be outing myself as a noob here, but... what is the (better) alternative?


You inject the pool itself.


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?


The 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.


No - 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.


I 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.


ahh, gotcha! thanks!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: