dcgh...@gmail.com wrote:

> Hello there,
> 
> I have the following code structure (more or less) in several processes: 
> 
> from sqlalchemy import create_engine
> from sqlalchemy.orm import sessionmaker
> 
> engine = create_engine(some_mysql_dburi)
> session = sessionmaker(bind=engine)()
> 
> while True:
>    query = session.query(...).filter(...)
>    # do something here from that query, update, insert new rows, etc.
>    session.commit()
> 
> I am getting a too many connections error and it's not all the time, so I'm 
> not sure what would it be. Although there are several processes running, I 
> don't think at some time I'm connected to mysql server more than the amount 
> of connections allowed, which by default it's about 150 connections I think, 
> and I'm not modifying the default value. So I must have some errors in this 
> layout of my code. Here are some of the questions about the session and the 
> connection(s) within I'd like to ask:
> 1- How many opened connections are maintained by a single session object? I 
> read somewhere it's only one, but, here it's my next

if only one engine is associated with it, them just one connection.

> 2- Does the session close the connection being used or requests for another?

assuming the session isn’t in “autocommit” mode, the connection stays open
until you call commit(), rollback(), or close().

> If it requests for a new one, does it close the previous (i.e., return it to 
> the engine pool)?

just one connection at a time yup

> 3- Should I call session.close() right after the session.commit() statement?

it’s not necessary, however all objects that are associated with that
session are still able to make it start up a new transaction if you keep
using those objects and hit upon unloaded attributes. close() would prevent
that.

> If have to, do I have to put the session creation inside the while?

not the way it is above; after that commit(), the Session there isn’t
connected to anything. Unless the objects associated with it are being used
in other threads, or something like that.

> I read that when the session gets garbage collected the connection(s) is(are) 
> closed,

that happens also but the commit() is enough (and close() makes it sure).

> so I could do this, but I don't know if it is a good use of the session.
> 
> I read the docs many times and I didn't find anything solid that answers that 
> questions to me, any help on the subject will be very appreciated, thanks in 
> advance.  

the best section is this one:
http://docs.sqlalchemy.org/en/rel_0_9/orm/session_basics.html#when-do-i-construct-a-session-when-do-i-commit-it-and-when-do-i-close-it.

> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to