Pypyodbc.DataError与数据库有关

时间:2015-05-25 17:07:55

标签: python mysql pypyodbc

我想弄清楚为什么python中的测试程序不起作用。 我可以很好地从MySql Workbench访问数据库,我想我已经完成了编程部分的一切,我也去了管理工具并将我的数据库添加到ODBC数据库源,这是我的测试程序,如果有人能弄明白什么是错误:

import pypyodbc

conn = pypyodbc.connect("DSN=database")


def func():
    l = []
    cur = conn.cursor()
    try:
        cur.execute("SELECT foo FROM table")
    except pypyodbc.DatabaseError:
        pass
    conn.commit()
    for i in cur:
        l.append(i)
    conn.close()
    cur.close()

func()

我得到的错误是:

Traceback (most recent call last):
  File "D:/path/test.py", line 21, in <module>
    func()
  File "D:/path/test.py", line 14, in func
    for i in cur.fetchall():
  File "D:/path/test.py", line 1819, in fetchall
    row = self.fetchone()
  File "D:/path/test.py", line 1893, in fetchone
    check_success(self, ret)   
  File "D:/path/test.py", line 986, in check_success
    ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
  File "D:/path/test.py", line 956, in ctrl_err
    raise DataError(state,err_text)
pypyodbc.DataError: ('22018', '[22018] [MySQL][ODBC 5.3(a) Driver][mysqld-5.5.5-10.0.17-MariaDB]')

1 个答案:

答案 0 :(得分:1)

错误22018是&#34;无效字符&#34;错误。一个常见原因是尝试使用ANSI(&#34;(a)&#34;)版本的MySQL Connector / ODBC来检索Unicode数据。在这种情况下,解决方案是使用Unicode(&#34;(w)&#34;)版本的驱动程序。