我是pyodbc的新手,我搜索了很多,但没有找到我想要的答案。我有一段用python编写的代码,我必须调试。我不能使用另一个模块代替 pyodbc。这是我的问题:我从这样的表中获取列:
col_list = self.connection.cursor().columns(table=tabspec["name"], schema=tabspec["schema"])
然后我循环它们以获得每列的名称:
for c in col_list:
colspec["column_name"] = c.column_name...
问题是,在表中,有一列类型为 LONG(),在该特定列中,我有以下错误:
pyodbc.DataError: ('22003', '[22003] [Oracle][ODBC]Numeric value out of range. (0) (SQLGetData)')
我无法更改数据库,所以我必须在我的 python 代码中找到解决方案。有人可以帮忙吗?
提前谢谢。
这似乎是pyodbc
中的错误。我可以通过运行以下命令在我的 Oracle 数据库上重现它:
db = pyodbc.connect('DSN=test;PWD=passwd')
c = db.cursor()
col_list = c.columns(table="PLAN_TABLE")
for col in col_list:
print(col)
我检查了PLAN_TABLE
是否有一列LONG
类型。
我使用的其他库:odbc
和cx_Oracle
没有columns()
方法,因此无法使用它们。
我认为您可以填写错误报告并找到解决方法。要找到解决方法,您必须告诉我们您要做什么:报告架构,交换数据等。也许您可以使用其他库(如cx_Oracle
),也可以使用其他pyodbc
方法来查找请求的信息。
如果您只需要所选表的列名,则可以查询 Oracle 元数据:
TBL_COLUMNS_SQL = """SELECT column_name
FROM user_tab_columns
WHERE LOWER(table_name)=LOWER('%s')
"""
def get_columns(cursor, tbl_name):
result = []
cursor.execute(TBL_COLUMNS_SQL % (tbl_name))
for row in cursor.fetchall():
result.append(row[0])
return result
有关更多元数据信息,如类型,大小,默认值等,请参阅我的创建Oracle数据库报告的工具:http://code.activestate.com/recipes/576534-dump-oracle-db-schema-to-text/