pyodbc 数据库连接和数字格式

Posted

技术标签:

【中文标题】pyodbc 数据库连接和数字格式【英文标题】:pyodbc database connection and number format 【发布时间】:2015-07-24 11:21:45 【问题描述】:

我正在使用 pypyodbc 库将 Python 算法连接到 Oracle 数据库。

我正在使用以下内容:

def connectToServer(DSN,Server,Password):
    connString = "DSN="+DSN+";Uid="+Server+";Pwd="+Password
    connObject = odbc.connect(connString)

    return connObject

connObject = connectToServer('xxx','xxx','xxx')

连接很好,我可以向服务器传递命令(创建、删除表、执行过程等...)

但是我无法通过以下方式提取数据:

# print top lines of a given table
def selectTopFromTable(connObject,tableName,numberRow=100):
    cur = connObject.cursor()
    command = '''SELECT * FROM ''' + tableName +''' WHERE ROWNUM <= ''' + str(numberRow) + '''; '''  
    cur.execute(command)

    for row in cur.fetchall():
        print(row)

selectTopFromTable(connObject,'xxx')

得到以下错误:

ValueError:无法将字符串转换为浮点数:b'5,3'

我认为问题在于格式编号 FR 与 EN(我正在使用基于 FR 的服务器) - 服务器提供 FR 格式编号的值(即 5,3 而不是 5.3),Python 在尝试时感到困惑将所谓的 NUMBER SQL 类型转换为双精度类型。

是否可以配置 pypyodbc 连接以检索 EN 数字格式的值? (与 SQL Developer 或 Toad 等客户端的设置方式相同)?

【问题讨论】:

【参考方案1】:

以下是如何在 Python 中将您的语言环境转换为法国:

import locale

locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
locale.atof('1000,53')

这会将字符串转换为具有法国语言环境设置的浮点数。我不确定如何将其与 Oracle 联系起来(自 1990 年代以来我就没有使用过 Oracle),但希望这能让您走上正确的道路。您可以将其转换为字符串,然后使用此方法进行转换,但在 DB 级别可能有更好的方法。

【讨论】:

你的意思可能是:locale.setlocale(locale.LC_ALL, 'en_GB.UTF-8')

以上是关于pyodbc 数据库连接和数字格式的主要内容,如果未能解决你的问题,请参考以下文章

pyodbc连接MSSQL执行SQL语句

Django 1.11.7+django_pyodbc_azure-1.11.0.0+pyodbc 连接mssql 数据库

使用 pyodbc 将带日期的数据上传到 MS Access 数据库

连接字符串中的 PYODBC 传递变量

pyodbc连接MySQL数据库

无法使用 pyodbc 库连接到 Azure 数据库