首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`decimal.Decimal`和SQLAlchemy真的存储cdecimal吗?

`decimal.Decimal`和SQLAlchemy真的存储cdecimal吗?
EN

Stack Overflow用户
提问于 2012-03-14 02:20:54
回答 3查看 965关注 0票数 4

我的django + SQLAlchemy应用程序使用cdecimal而不是默认的decimal模块。我遵循了SQLAlchemy网站上的说明:

代码语言:javascript
复制
import sys
import cdecimal
sys.modules["decimal"] = cdecimal 

使用之前的stackoverflow thread中的相同内容,我可以将数据添加到DB中。但是,当我从表中检索一个条目并查看它的值时,返回给我的值类型实际上是decimal.Decimal而不是cdecimal.Decimal

如何告诉SQLAlchemy在检索到条目时返回cdecimal.Decimal对象?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-15 07:08:26

这里的解决方案是将以下代码

代码语言:javascript
复制
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。

票数 3
EN

Stack Overflow用户

发布于 2012-03-14 04:36:42

一旦您使用cdecimal修补了decimal模块,SQLAlchemy就不能加载它。因此,在这种情况下,您需要确保在安装SQLalhcemy之前进行sys.modules更改:

代码语言:javascript
复制
import sys
import cdecimal
assert "sqlalchemy" not in sys.modules
assert "decimal" not in sys.modules
sys.modules["decimal"] = cdecimal

编辑:另外,请确保您正在执行sys.modules["decimal"]以实际设置"decimal“的替代项。

票数 3
EN

Stack Overflow用户

发布于 2015-06-06 16:34:05

您可以以一种更健壮的方式将decimal替换为cdecimal,方法是强制它在任何其他代码运行之前发生。在启动时,Python解释器将读取任何.pth文件并执行它们包含的任何import语句,这样我们就可以在任何程序运行之前运行代码。我已经在my blog上更详细地记录了cdecimal交换--基本上你需要创建两个文件:

首先是site-packages/my_patches.pth,它包含:

代码语言:javascript
复制
import my_patches

其次是包含交换代码的site-packages/my_patches.py

代码语言:javascript
复制
import sys
import cdecimal
# Ensure any import of decimal gets cdecimal instead.
sys.modules['decimal'] = cdecimal

那么你应该不会有SQLAlchemy的问题,因为它不会有机会运行预交换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9689796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档