我正在尝试从访问数据库中提取表列表。该脚本遍历并显示大约三分之一的表并出现以下错误:
回溯(最近调用最后):文件“C:/GageInfo/sourcecode for GageTrakNotify/__test script.py”,第 31 行,在 cursor2.columns(rows.table_name) 中的 fld: UnicodeDecodeError: ‘utf-16-le’编解码器无法解码位置 132-133 中的字节:非法编码
任何提示将不胜感激。
import pyodbc
cursor1 = conn.cursor()
cursor2 = conn.cursor()
tblCount = 0
for rows in cursor1.tables():
if rows.table_type == "TABLE":
tblCount += 1
print(rows.table_name)
for fld in cursor2.columns(rows.table_name):
print(fld.table_name, fld.column_name)
conn.close()
原文由 Eddie Snipes 发布,翻译遵循 CC BY-SA 4.0 许可协议
这几乎可以肯定是由
cursor.columns()
的一个已知问题引起的,如果表元数据包含列的“描述”,则在使用 Access ODBC 驱动程序时。以下 GitHub 问题包括对该问题和可能的解决方法的讨论:https://github.com/mkleehammer/pyodbc/issues/328
TL;DR:Access ODBC 驱动程序在这些情况下返回尾随垃圾字节,并且字节的某些组合将不是有效的 UTF-16LE 编码字符。 pyodbc 输出转换器函数可用于拦截字节字符串并在不抛出异常的情况下对其进行解码。此处描述了具体的解决方法:
https://github.com/mkleehammer/pyodbc/issues/328#issuecomment-419655266