On Fri, Jul 22, 2016 at 3:25 PM, TomS. <pidev...@gmail.com> wrote:
> On 07/19/2016 06:41 PM, Mike Bayer wrote:
>
>
>
> On 07/19/2016 11:51 AM, TomS. wrote:
>
> Hi,
>
> We have Flask app which uses SQLAlchemy. Weird error started to happen
> recently. The difficulty is that we can't reproduce the error (/figure
> out conditions causing issue) - maybe someone could help. Any hints/tips
> would be appreciated.
>
> There is a part in the code which constructs IN in SQL:
>
> MyModel.id.in_(my_ids)
>
> For some cases my_ids is an empty list. It works without any problems,
> but after some time the same query (using empty list) starts to raise an
> exception:
>
> SAWarning: The IN-predicate on "MyModel.id" was invoked with an empty
> sequence. This results in a contradiction, which nonetheless can be
> expensive to evaluate.  Consider alternative strategies for improved
> performance.
>
> After restarting app, everything works again.
>
> The question is - why this exception is not risen always (although we
> tried to run app with empty list directly), but after some time of app
> execution (~1 day)?
>
>
> It's not an exception, it's a warning.  Python warnings by default emit only
> once, see:
> https://docs.python.org/2/library/warnings.html#the-warnings-filter
>
> Ok, this is the explanation why it doesn't show up regularly. Thank you.
>
> I don't know why SAWarning is treated as error. Here is the log:
>
> 2016-07-21 13:58:14,108 ERROR: Exception on /own [GET]
> Traceback (most recent call last):
> [...]
>   File
> "/home/developer/.virtualenvs/rest/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py",
> line 1297, in warn
>     warnings.warn(msg, exc.SAWarning, stacklevel=2)
> SAWarning: The IN-predicate on "MyModel.id" was invoked with an empty
> sequence. This results in a contradiction, which nonetheless can be
> expensive to evaluate.
>
> I will also ask on Flask group, but maybe you know the reason - Flask config
> regarding logging is as follow:
>
> import logging
>
> from logging.handlers import RotatingFileHandler
>
> logger_file_handler = RotatingFileHandler('my.log', maxBytes=1024 * 1024 *
> 100, backupCount=20)
> logger_file_handler.setLevel(logging.DEBUG)
> logger_formatter = logging.Formatter(u'%(asctime)s %(levelname)s:
> %(message)s')
>
> logger_file_handler.setFormatter(logger_formatter)
>
> logging.captureWarnings(True)
>
> app.logger.addHandler(logger_file_handler)
> app.logger.setLevel(logging.DEBUG)
>
> There is no code which change behavior (by  filter) of SAWarning to 'error'
> ...

The python warnings system is completely separate from the logging
system. Whether or not a particular warning is turned into an
exception is driven by the "warnings filter":

https://docs.python.org/2/library/warnings.html#the-warnings-filter

I think you must be configuring the warnings filter somewhere, because
by default this shouldn't raise an exception.

Simon

-- 
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 https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to