From: Mike Bayer Date: Sat, 11 Dec 2010 22:53:02 +0000 (-0500) Subject: cdecimal docs, link to pypi X-Git-Tag: rel_0_7b1~178 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24acb8f95a68b3c1bdd26f4ce5c26adcbce5164d;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git cdecimal docs, link to pypi --- diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 3e592ea514..c66624b5f8 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -1013,6 +1013,38 @@ class Numeric(_DateAffinity, TypeEngine): ``decimal.Decimal`` objects by default, applying conversion as needed. + Note that the `cdecimal `_ library + is a high performing alternative + to Python's built-in ``decimal.Decimal`` type, which performs very poorly + in high volume situations. SQLAlchemy 0.7 is tested against ``cdecimal`` + and supports it fully. The type is not necessarily supported by + DBAPI implementations however, most of which contain an import + for plain ``decimal`` in their source code, even though + some such as psycopg2 provide hooks for alternate adapters. + SQLAlchemy imports ``decimal`` globally as well. While the + alternate ``Decimal`` class can be patched into SQLA's ``decimal`` module, + overall the most straightforward and foolproof way to use + "cdecimal" given current DBAPI and Python support is to patch it directly + into sys.modules before anything else is imported:: + + import sys + import cdecimal + sys.modules["decimal"] = cdecimal + + While the global patch is a little ugly, it's particularly + important to use just one decimal library at a time since + Python Decimal and cdecimal Decimal objects + are not currently compatible *with each other*:: + + >>> import cdecimal + >>> import decimal + >>> decimal.Decimal("10") == cdecimal.Decimal("10") + False + + SQLAlchemy will provide more natural support of + cdecimal if and when it becomes a standard part of Python + installations and is supported by all DBAPIs. + """ __visit_name__ = 'numeric' @@ -1048,37 +1080,6 @@ class Numeric(_DateAffinity, TypeEngine): which case ``asdecimal=False`` will at least remove the extra conversion overhead. - Note that the "cdecimal" library is a high performing alternative - to Python's built-in "decimal" type, which performs very poorly - in high volume situations. SQLAlchemy 0.7 is tested against "cdecimal" - as well and supports it fully. The type is not necessarily supported by - DBAPI implementations however, most of which contain an import - for plain "decimal" in their source code, even though - some such as psycopg2 provide hooks for alternate adapters. - SQLAlchemy imports "decimal" globally as well. While the - alternate "Decimal" class can be patched into SQLA's "decimal" module, - overall the most straightforward and foolproof way to use - "cdecimal" given current support is to patch it directly - into sys.modules before anything else is imported:: - - import sys - import cdecimal - sys.modules["decimal"] = cdecimal - - While the global patch is a little ugly, it's particularly - important to use just one decimal library at a time since - Python Decimal and cdecimal Decimal objects - are not currently compatible *with each other*:: - - >>> import cdecimal - >>> import decimal - >>> decimal.Decimal("10") == cdecimal.Decimal("10") - False - - SQLAlchemy will provide more automatic support of - cdecimal if and when it becomes a standard part of Python - installations and is supported by all DBAPIs. - """ self.precision = precision self.scale = scale