访问字段名称包含变音符号时出现pyodbc错误

Posted

技术标签:

【中文标题】访问字段名称包含变音符号时出现pyodbc错误【英文标题】:pyodbc error when Access field name contains diacritics 【发布时间】:2013-11-24 15:17:58 【问题描述】:

我正在使用 pyodbc python 模块。

当我使用SELECT = "SELECT k.Poznámka as poznamka from karta as k" 时出现错误

错误:('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。应为 1. (-3010) (SQLExecDirectW)')

问题在于名称“Poznámka”和“á”。当我使用没有变音符号的字段标题的相同选择时,例如 k.Name 一切正常。

请问这是怎么回事?

【问题讨论】:

这个很不清楚。请记住,我们不知道您在说什么。 【参考方案1】:

对于它的价值,以下代码对我来说没有错误:

# -*- coding: cp1252 -*-
import pyodbc
cnxn = pyodbc.connect('DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\\Users\\Public\\Database1.accdb;')
cursor = cnxn.cursor()
cursor.execute("SELECT k.Poznámka as poznamka from karta as k")
while 1:
    row = cursor.fetchone()
    if not row:
        break
    print row.poznamka
cnxn.close()

编辑

使用编码为 UTF-8 的 Python 源文件,以下内容对我有用:

# -*- coding: UTF-8 -*-
import pyodbc
cnxn = pyodbc.connect('DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\\Users\\Public\\Database1.accdb;')
cursor = cnxn.cursor()
sql = u"SELECT k.Poznámka as poznamka from karta as k"
cursor.execute(sql.encode('cp1252'))
while 1:
    row = cursor.fetchone()
    if not row:
        break
    print row.poznamka
cnxn.close()

【讨论】:

yeeees,这一定是我的问题。我在 python 文件中使用 utf-8,但似乎我的访问权限是 cp1252。请问,我应该如何编辑我的 sql 查询才能处理这个问题? @peter 当你的评论出现时,我刚刚更新了我的答案。 谢谢。但我无法更改整个 python 脚本的编码。有没有机会只为这个 SELECT 更改它?我直接在 SELECT 中尝试了 u'Poznámka'.encoding('cp1252') 它没有帮助。 戈德,谢谢你的努力。但错误“参数太少。预期 1...”仍然存在 @peter 我能说什么?我的脚本适合我。你可以下载它here,看看它是否包含一些我看不到的神奇优点。

以上是关于访问字段名称包含变音符号时出现pyodbc错误的主要内容,如果未能解决你的问题,请参考以下文章

终极解决方案为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。

Azure 搜索语言分析器和变音符号

通过 sqlalchemy 和 pyodbc 访问 MS SQL 数据库时出现“登录超时”错误

带有变音符号的 xcodebuild 目标名称

终极解决方案为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。

在 Swift 中使用变音符号转换字符串