public inbox for [email protected]  
help / color / mirror / Atom feed
From: Adrian Klaver <[email protected]>
To: Michael P. McDonnell <[email protected]>
Cc: [email protected]
Subject: Re: Consecutive Inserts Freeze Execution of Psycopg3
Date: Sun, 23 Apr 2023 18:20:48 -0700
Message-ID: <[email protected]> (raw)
In-Reply-To: <CAHmCLHrrT5geecTN1LbkJbvQdA6XhU4gW7bsroRtMEMfLY0aPw@mail.gmail.com>
References: <CAHmCLHrztOYi=uLqc6jKrytz5=e4ZKhYP1LTyLfTi-KGC1pR9w@mail.gmail.com>
	<[email protected]>
	<CAHmCLHrdxjeuRDxS7w2P-9LZ_C5wxsoVyLrVJwRRwrMOXVu4dQ@mail.gmail.com>
	<[email protected]>
	<CAHmCLHq5hHaDfVi_=p9PAaLjdsKEiZvDZVqUOgTd46+UizHBaQ@mail.gmail.com>
	<[email protected]>
	<CAHmCLHrrT5geecTN1LbkJbvQdA6XhU4gW7bsroRtMEMfLY0aPw@mail.gmail.com>

On 4/23/23 18:06, Michael P. McDonnell wrote:
> So I appreciate you're trying to point to the official source of the 
> documentation; but one place where FastAPI might be a place of 

This is the first mention of using FastAPI.

> inspiration is the consistent building of a single use case example to 
> show how one might do something more complex. Given the docs available - 
> I have no idea how I might take a dict and generate an UPDATE statement 
> using the sql.SQL API you have.

Some pseudo-code showing what you are trying to achieve would be useful.

> 
> And I'm genuinely not trying to nitpick here, I'm relatively new to 
> Python and am more or less winging it and the documentation immediately 
> available doesn't exactly spell out *all the things*; So again - thank 
> you for your help in getting me over the original hump; I appreciate it.

It is tough for documentation to cover all possible user cases. I have 
found  the best way for me is to write a flow chart of what I want to do 
and then search for the commands/code that gets me there.

> 
> On Sun, Apr 23, 2023 at 7:59 PM Adrian Klaver <[email protected] 
> <mailto:[email protected]>> wrote:
> 
>     On 4/23/23 17:26, Michael P. McDonnell wrote:
>      > Thanks Adrian -
>      > I appreciate it; and I've been pouring through documentation to
>     try and
>      > get to this point.
>      > I can't help but feel I'm doing it "wrong" but no website I can find
>      > recently seems to have a "right" way of doing things that's
>     reasonably
>      > kept up.
>      > It would be nice if "wrong" had a way of shooting me in the foot
>     with
>      > verbose errors or warnings.
> 
>     Start here:
> 
>     https://www.psycopg.org/psycopg3/docs/basic/index.html
>     <https://www.psycopg.org/psycopg3/docs/basic/index.html;
> 
>     and work through the sections in order.
> 
>      >
>      > -Mike
>      >
>      > On Sun, Apr 23, 2023 at 7:15 PM Adrian Klaver
>     <[email protected] <mailto:[email protected]>
>      > <mailto:[email protected]
>     <mailto:[email protected]>>> wrote:
>      >
>      >     On 4/23/23 14:55, Michael P. McDonnell wrote:
>      >      > That helped a ton, I don't understand why I've had to
>     rewrite the
>      >     crap
>      >      > out of all of this to get it to work (dropping SqlAlchemy,
>     upgrading
>      >      > from psycopg2 to psycopg, etc...) but it's working now and
>     I can
>      >     work
>      >      > around it. Thank you.
>      >
>      >     Well:
>      >
>      >     1) SQLAlchemy is an ORM that tries to make all databases look
>     the same.
>      >
>      >     2) psycopg2 != psycopg. For details see:
>      >
>      > https://www.psycopg.org/psycopg3/docs/basic/from_pg2.html
>     <https://www.psycopg.org/psycopg3/docs/basic/from_pg2.html;
>      >     <https://www.psycopg.org/psycopg3/docs/basic/from_pg2.html
>     <https://www.psycopg.org/psycopg3/docs/basic/from_pg2.html>;
>      >
>      >     3) It would have been more of a surprise if you did not have
>     to change
>      >     anything.
>      >
>      >     4) And this
>      >
>      >     with self.connection.cursor() as conn:
>      >
>      >     was just plain wrong. You where trying to make a cursor be a
>     connection
>      >     and that is not going to work.
>      >
>      >
>      >      >
>      >      >
>      >      > On Sun, Apr 23, 2023 at 4:25 PM Adrian Klaver
>      >     <[email protected] <mailto:[email protected]>
>     <mailto:[email protected] <mailto:[email protected]>>
>      >      > <mailto:[email protected]
>     <mailto:[email protected]>
>      >     <mailto:[email protected]
>     <mailto:[email protected]>>>> wrote:
>      >      >
>      >      >     On 4/23/23 13:45, Michael P. McDonnell wrote:
>      >      >      > Python 3.10.6
>      >      >      > psycopg library 3.1.8
>      >      >      >
>      >      >      > Running consecutive inserts sourced in files.
>      >      >      > All inserts are of the same format:
>      >      >      >
>      >      >      > INSERT INTO _____ (field1, field2, field3)
>      >      >      > SELECT field1, field2, field3 FROM ____, Join ___, join
>      >     ___ etc...
>      >      >      >
>      >      >      > The code I've written is this:
>      >      >      >
>      >      >      > for qi in range(qlen):
>      >      >      >              query = queries[qi]
>      >      >      >              qparams = params[qi]
>      >      >      >              with self.connection.cursor() as conn:
>      >      >      >                  conn.execute(query, qparams)
>      >      >
>      >      >     In above you are running the context manager(with)
>     over the
>      >     cursor not
>      >      >     the connection. This will not automatically commit the
>      >     transaction. You
>      >      >     will need to either explicitly do connection.commit()
>     or use
>      >     the with
>      >      >     over the connection per:
>      >      >
>      >      >
>     https://www.psycopg.org/psycopg3/docs/basic/transactions.html
>     <https://www.psycopg.org/psycopg3/docs/basic/transactions.html;
>      >   
>       <https://www.psycopg.org/psycopg3/docs/basic/transactions.html
>     <https://www.psycopg.org/psycopg3/docs/basic/transactions.html>;
>      >      >
>      >     
>       <https://www.psycopg.org/psycopg3/docs/basic/transactions.html
>     <https://www.psycopg.org/psycopg3/docs/basic/transactions.html;
>      >   
>       <https://www.psycopg.org/psycopg3/docs/basic/transactions.html
>     <https://www.psycopg.org/psycopg3/docs/basic/transactions.html>>;
>      >      >
>      >      >      >
>      >      >      > When I run the queries in dbeaver - the first query
>     takes
>      >     120s (it's
>      >      >      > 1.9M rows), the second query takes 2s (7000 rows).
>      >      >      > When I run the queries in python - it freezes on the
>      >     second query.
>      >      >      >
>      >      >      > Any guidance on how to attack this would be awesome
>     as I have
>      >      >     re-written
>      >      >      > my code a dozen times and am just slinging mud to
>     see what
>      >     sticks.
>      >      >
>      >      >     --
>      >      >     Adrian Klaver
>      >      > [email protected]
>     <mailto:[email protected]> <mailto:[email protected]
>     <mailto:[email protected]>>
>      >     <mailto:[email protected]
>     <mailto:[email protected]> <mailto:[email protected]
>     <mailto:[email protected]>>>
>      >      >
>      >
>      >     --
>      >     Adrian Klaver
>      > [email protected] <mailto:[email protected]>
>     <mailto:[email protected] <mailto:[email protected]>>
>      >
> 
>     -- 
>     Adrian Klaver
>     [email protected] <mailto:[email protected]>
> 

-- 
Adrian Klaver
[email protected]






view thread (10+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: Consecutive Inserts Freeze Execution of Psycopg3
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox