Python pyodbc数据库连接和数字格式

Python pyodbc数据库连接和数字格式,python,oracle,number-formatting,pyodbc,Python,Oracle,Number Formatting,Pyodbc,我正在使用PyODBC库将Python算法连接到Oracle数据库 我正在使用以下命令: def connectToServer(DSN,Server,Password): connString = "DSN="+DSN+";Uid="+Server+";Pwd="+Password connObject = odbc.connect(connString) return connObject connObject = connectToServer('xxx','x

我正在使用PyODBC库将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')
连接运行良好,我可以将命令传递给服务器创建、删除表、执行过程等

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

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在尝试将假定的数字SQL类型转换为双精度时感到困惑


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

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

import locale

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

这将字符串转换为浮点数,并带有法国地区的设置。我不确定如何将其与Oracle联系起来,我自20世纪90年代以来就没有使用过Oracle,但希望这能让您走上正确的道路。您可以将其转换为字符串,然后使用此方法进行转换,但在DB级别可能有更好的方法。

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

import locale

locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
locale.atof('1000,53')
这将字符串转换为浮点数,并带有法国地区的设置。我不确定如何将其与Oracle联系起来,我自20世纪90年代以来就没有使用过Oracle,但希望这能让您走上正确的道路。您可以将其强制转换为字符串,然后使用此方法进行转换,但在DB级别可能有更好的方法。

您的意思可能是:locale.setlocalelocal.LC_ALL,“en_GB.UTF-8”您的意思可能是:locale.setlocalelocal.LC_ALL,“en_GB.UTF-8”