我的django + SQLAlchemy应用程序使用cdecimal而不是默认的decimal模块。我遵循了SQLAlchemy网站上的说明:
import sys
import cdecimal
sys.modules["decimal"] = cdecimal 使用之前的stackoverflow thread中的相同内容,我可以将数据添加到DB中。但是,当我从表中检索一个条目并查看它的值时,返回给我的值类型实际上是decimal.Decimal而不是cdecimal.Decimal。
如何告诉SQLAlchemy在检索到条目时返回cdecimal.Decimal对象?
谢谢!
发布于 2012-03-15 07:08:26
这里的解决方案是将以下代码
import sys
import cdecimal
assert "sqlalchemy" not in sys.modules
assert "decimal" not in sys.modules
sys.modules["decimal"] = cdecimal在manage.py文件而不是models.py文件中。这确保了cdecimal从一开始就真正取代了decimal。
发布于 2012-03-14 04:36:42
一旦您使用cdecimal修补了decimal模块,SQLAlchemy就不能加载它。因此,在这种情况下,您需要确保在安装SQLalhcemy之前进行sys.modules更改:
import sys
import cdecimal
assert "sqlalchemy" not in sys.modules
assert "decimal" not in sys.modules
sys.modules["decimal"] = cdecimal编辑:另外,请确保您正在执行sys.modules["decimal"]以实际设置"decimal“的替代项。
发布于 2015-06-06 16:34:05
您可以以一种更健壮的方式将decimal替换为cdecimal,方法是强制它在任何其他代码运行之前发生。在启动时,Python解释器将读取任何.pth文件并执行它们包含的任何import语句,这样我们就可以在任何程序运行之前运行代码。我已经在my blog上更详细地记录了cdecimal交换--基本上你需要创建两个文件:
首先是site-packages/my_patches.pth,它包含:
import my_patches其次是包含交换代码的site-packages/my_patches.py:
import sys
import cdecimal
# Ensure any import of decimal gets cdecimal instead.
sys.modules['decimal'] = cdecimal那么你应该不会有SQLAlchemy的问题,因为它不会有机会运行预交换。
https://stackoverflow.com/questions/9689796
复制相似问题