is it true of sqlalchemy verison 0.7 (which BTW I am using)?
If I close() explicitly only for insert queries, I can see that parallel
inserts happening equal to no. of threads that I have, but if I remove it,
no parallel inserts happen(I am checking this by using show processlist on
mysql prompt)
pool_size = 150 : when close() is called.
pool_size = 30 : when close() in not called.
I had to bump the pool_size as log of 'wait timeout exceeded' errors were
seen in the application log.
I am taking care of creating new session per thread which is not being
shared with others.
BTW fetch_all( ) from result worked in case select queries, but we are
still experimenting to eliminate / minimize the other errors
On Monday, September 22, 2014 11:14:04 AM UTC-5, Milind Vaidya wrote:
>
> HI
>
> I have following code,
>
>
>
>
> @db_error_handler
> def execute_query(self, query_str, data=None):
> '''Execute DB query and retry for common DB interaction errors'''
> errors_concerned = [1213, 1205, 2013, 2006]
> attempts = 1
> while(True):
> try:
> result = self.session.execute(query_str, data)
> #result.close() : Trying to commonize insert/select
> self.session.commit()
> return result
> except OperationalError as oe:
> self.session.rollback()
> if oe.orig[0] in errors_concerned:
> if attempts <= 3:
> logger.error("Error occured in attempts %s: %s" %
> (attempts, oe.orig))
> time.sleep(2 * attempts)
> attempts += 1
> continue
> else:
> logger.error("Error occured, attempts exhausted
> %s: %s" % (attempts, oe.orig))
> break
> else:
> raise
>
>
> I am constructing the queries outside and passing to this function. I want
> to return result in case of select queries. But I can not do that if I call
> result.close() before returning. Without closing the result, insert queries
> have a problem.
>
> ERROR: DB operation failure: (ProgrammingError) (2014, "Commands out of
> sync; you can't run this command now") None None
>
>
> So I was thinking of using
>
> is_insert¶
> <http://docs.sqlalchemy.org/en/rel_0_7/core/connections.html#sqlalchemy.engine.base.ResultProxy.is_insert>
>
> True if this ResultProxy
> <http://docs.sqlalchemy.org/en/rel_0_7/core/connections.html#sqlalchemy.engine.base.ResultProxy>
>
> is the result of a executing an expression language compiled
> expression.insert()
> <http://docs.sqlalchemy.org/en/rel_0_7/core/expression_api.html#sqlalchemy.sql.expression.insert>
>
> construct.
>
> When True, this implies that the inserted_primary_key
> <http://docs.sqlalchemy.org/en/rel_0_7/core/connections.html#sqlalchemy.engine.base.ResultProxy.inserted_primary_key>
>
> attribute is accessible, assuming the statement did not include a user
> defined “returning” construct.
>
> to check if the query resulted in insert and then call close skip
> otherwise ? Is it ok from semantic point of view ? Also will it result it
> inconsistent connection state or connections ?
>
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.