【问题标题】:PyODBC - cursor record value roundingPyODBC - 游标记录值四舍五入
【发布时间】:2011-08-08 19:09:19
【问题描述】:

我正在编写一个 Python 脚本(Windows XP 上的 Python 版本 2.5.1),该脚本涉及连接到 Microsoft Access (.mdb) 数据库以从表中读取值。我在一项记录中得到了一些意想不到的结果,其中感兴趣的精度领域正在四舍五入。

我知道感兴趣的 Access 表字段是 Double 数据类型。但是,导致我在表中发现这个的值是 1107901035.43948。当我读取 Python 代码中的值并将其打印出来时,它显示的是 1107901035.44。

是否有 pyODBC 连接参数或其他必须设置的参数?我在documentation 中找不到任何内容

我的代码如下所示(目的是通过识别对我感兴趣的领域具有最大价值的记录来解决不需要的记录):

conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + pGDB)
conn.autocommit = True
cursor = conn.cursor()

tableList = []
for x in cursor.tables():
    val = str(x[2])
    if val[0:3] <> "MSy":
        if val[0:3] <> "GDB":
            if val[-5:] <> "Index":
                tableList.append(val)

for x in tableList:
    try:
        SQL = "SELECT * FROM %s" % (x)
        cursor.execute(SQL)
        rows = cursor.fetchall()
        counter = 0
        for row in rows:
            counter +=1

        if counter > 1:
            print "Site %s is a multipart basin" % (x)
            SQL = "SELECT MAX(Shape_Area) AS AREA FROM %s" % (x)
            cursor.execute(SQL)
            row = cursor.fetchone()
            val = row.AREA
            print str(val)
            SQL = "DELETE * FROM %s WHERE Shape_Area < %s" % (x, val)
            cursor.execute(SQL)

谢谢, 汤姆

【问题讨论】:

  • 是的,它返回 110790103543948.0

标签: python ms-access pyodbc


【解决方案1】:

Django 使用 Jinja 模板,所以你可以使用它的圆形过滤器。它的工作原理如下:

模板.html

<p>{{ VALUE| round(2, 'floor') }}</p>

查看 Jinja 的 documentation on topic

SQL 轮函数也可以完成这项工作:

SQL = "SELECT ROUND(MAX(Shape_Area), 2) AS AREA FROM %s" % (x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2012-08-04
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多