pyodbc 数据库连接和数字格式
pyodbc database connection and number format
我正在使用 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: could not convert string to float: b'5,3'
我认为问题在于格式编号 FR 与 EN(我在基于 FR 的服务器上工作)- 服务器提供 FR 格式编号的值(即 5,3 而不是 5.3)和 Python 在尝试将假定的 NUMBER SQL 类型转换为双精度类型时感到困惑。
是否可以配置 pypyodbc 连接以检索 EN 数字格式的值? (与 SQL Developer 或 Toad 等客户端的设置方式相同)?
以下是在 Python 中将您的区域设置转换为法国的方法:
import locale
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
locale.atof('1000,53')
这会将字符串转换为浮点数,并使用法国的区域设置。我不确定如何将它与 Oracle 联系起来(自 1990 年代以来我就没有使用过 Oracle),但希望这能让您走上正确的道路。您可以将其转换为字符串,然后使用此方法进行转换,但在数据库级别可能有更好的方法。
我正在使用 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: could not convert string to float: b'5,3'
我认为问题在于格式编号 FR 与 EN(我在基于 FR 的服务器上工作)- 服务器提供 FR 格式编号的值(即 5,3 而不是 5.3)和 Python 在尝试将假定的 NUMBER SQL 类型转换为双精度类型时感到困惑。
是否可以配置 pypyodbc 连接以检索 EN 数字格式的值? (与 SQL Developer 或 Toad 等客户端的设置方式相同)?
以下是在 Python 中将您的区域设置转换为法国的方法:
import locale
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
locale.atof('1000,53')
这会将字符串转换为浮点数,并使用法国的区域设置。我不确定如何将它与 Oracle 联系起来(自 1990 年代以来我就没有使用过 Oracle),但希望这能让您走上正确的道路。您可以将其转换为字符串,然后使用此方法进行转换,但在数据库级别可能有更好的方法。