On Feb 28, 2010, at 12:33 PM, Manlio Perillo wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Michael Bayer ha scritto:
>> On Feb 28, 2010, at 11:21 AM, Manlio Perillo wrote:
>>
>> I would like to write a patch for ticket #877.
>>
>> What is the best method to implement the requested feature?
>>
>> The ExecutionContext class has a post_exec method, so the implementation
>> for the psycopg2 driver can override this method, check for the notice
>> messages and log them.
>>
>> Attached is a very simple patch.
>>
>> The problem is that NOTICE messages will only be logged if echo
>> parameter is set to True, in the create_engine function; however I
>> usually don't want to echo all SQL statatements, but I'm interested to
>> see NOTICE messages.
>>
>>> 1. dont use the engine's logger, use one specific to the psycopg2 dialect
>>> 2. if the logger has info enabled, then you can dump the notices.
>>> otherwise don't waste CPU digging through them
>>
>>> put it under the namespace
>>> logging.getLogger('sqlalchemy.dialects.postgresql') .
>>
>
> Done, new patch attached.
> The is also a bug fix: I forgot to clear the notices list.
> The notices list is cleared *only* if messages are actually logged.
>
> I took the liberty to change the coding style, too.
>
> If patch is ok, I will upload it on the bug tracker.
looks good to me - have you run all the tests with that logging enabled ?
>
>
>
> Thanks Manlio
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iEYEARECAAYFAkuKqP8ACgkQscQJ24LbaUT9ZgCfdGG+vREnuoJf0e0KmjQaKAGH
> bkcAoIorPN24ZeDfvd6g7zym+jYGA1l3
> =LuLD
> -----END PGP SIGNATURE-----
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
> diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py
> b/lib/sqlalchemy/dialects/postgresql/psycopg2.py
> --- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py
> +++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py
> @@ -46,8 +46,10 @@
>
> """
>
> -import random, re
> +import random
> +import re
> import decimal
> +import logging
>
> from sqlalchemy import util
> from sqlalchemy import processors
> @@ -59,6 +61,10 @@
> PGIdentifierPreparer,
> PGExecutionContext, \
> ENUM, ARRAY
>
> +
> +logger = logging.getLogger('sqlalchemy.dialects.postgresql')
> +
> +
> class _PGNumeric(sqltypes.Numeric):
> def bind_processor(self, dialect):
> return None
> @@ -135,6 +141,14 @@
> else:
> return base.ResultProxy(self)
>
> + def post_exec(self):
> + if logger.isEnabledFor(logging.INFO):
> + for notice in self._connection.connection.notices:
> + # NOTICE messages have a newline character at the end
> + logger.error(notice.rstrip())
> +
> + self._connection.connection.notices[:] = []
> +
>
> class PostgreSQL_psycopg2Compiler(PGCompiler):
> def visit_mod(self, binary, **kw):
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.