繁体   English   中英

SQLAlchemy查询引发了关于sqlite和Decimal的不必要的警告,如何专门禁用?

[英]SQLAlchemy query raises unnecessary warning about sqlite and Decimal, how to specifically disable?

我通过金字塔使用SQLAlchemy访问一个简单的sqlite数据库。

当我构建逐渐复杂的查询时,我收到了这个警告: -

SAWarning:Dialect sqlite + pysqlite本身支持Decimal对象,而SQLAlchemy必须从浮点转换 - 舍入错误和其他可能发生的问题。 请考虑在此平台上将十进制数字存储为字符串或整数,以实现无损存储。

我的一个问题是这样做(释义): -

session.query(subquery.c.a*100.0/(subquery.c.b+subquery.c.c))

在这种情况下,子查询是子查询的名称,而a,b和c是整数。

我没有保存查询的结果或运行任何提交,这纯粹是数据提取/查询,因此当上面的警告被提出时我感到很惊讶。 如何在不完全过滤掉的情况下忽略此警告(如果将来我不小心将十进制数据保存到数据库中)?

您可以忽略警告warnings.filterwarnings为完成

import warnings
from sqlalchemy.exc import SAWarning
warnings.filterwarnings('ignore',
 r"^Dialect sqlite\+pysqlite does \*not\* support Decimal objects natively\, "
 "and SQLAlchemy must convert from floating point - rounding errors and other "
 "issues may occur\. Please consider storing Decimal numbers as strings or "
 "integers on this platform for lossless storage\.$",
 SAWarning, r'^sqlalchemy\.sql\.type_api$')

编辑:这个问题中已经讨论了使用SQLite和SQLAlchemy使用十进制值的问题这个答案建议创建TypeDecorator ,它将内部的十进制值存储为文本。

对于查询中除以100.0,似乎SQLAlchemy将此值转换为Decimal 但是,您可以创建一个值为100.0的literal_column

import sqlalchemy
val100 = sqlalchemy.sql.expression.literal_column("100.0")
session.query(subquery.c.a*val100/(subquery.c.b+subquery.c.c))

使用此解决方案时,它不会向我显示警告。

PD:我使用SQLAlchemy版本1.0.11和Python 2.7.11。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM