【问题标题】:pyodbc error when Access field name contains diacritics访问字段名称包含变音符号时出现pyodbc错误
【发布时间】: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 一切正常。

请问这是怎么回事?

【问题讨论】:

  • 这个很不清楚。请记住,我们不知道您在说什么。

标签: python ms-access pyodbc


【解决方案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,看看它是否包含一些我看不到的神奇优点。
猜你喜欢
  • 2017-11-29
  • 2011-03-29
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多