无法在 Python 中显示来自 Access 的数据(通过 SQL)

Posted

技术标签:

【中文标题】无法在 Python 中显示来自 Access 的数据(通过 SQL)【英文标题】:Cannot display data from Access in Python (via SQL) 【发布时间】:2018-02-17 10:41:48 【问题描述】:

我希望 Python 通过 SELECT (SQL) 显示来自 Access 的数据,但出现错误。数据和数据库已经存在。有什么问题?

from tkinter import *
import pypyodbc
import ctypes

#Create connection
con = pypyodbc.connect('DRIVER=Microsoft Access Driver (*.mdb);UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;FIL=MS Access;DriverId=25;DefaultDir=C:/Users/HP/Desktop/PITL;DBQ=C:/Users/HP/Desktop/PITL/PITL.mdb;')
cursor = con.cursor ()

form = Tk ()
form.title ("Main")
form.geometry ('400x400')

def Show ():
    cursor.execute ("SELECT `Law_ID` FROM Laws WHERE Fine='1'")
    for row in cursor:
        print (row)

Button=Button(form, text = 'PUSH ME', command = Show)
Button.pack ()

form.mainloop ()

con.commit ()
cursor.close ()
con.close ()

错误:

Exception in Tkinter callback Traceback (most recent call last):   File "C:\Users\HP\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)   File "C:\Users\HP\Desktop\PITL\SHOW DATA.py", line 14, in Show
    cursor.execute ("SELECT `Law_ID` FROM Laws WHERE Fine='1'")   File "C:\Users\HP\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pypyodbc-1.3.4-py3.6.egg\pypyodbc.py", line 1626, in execute
    self.execdirect(query_string)   File "C:\Users\HP\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pypyodbc-1.3.4-py3.6.egg\pypyodbc.py", line 1652, in execdirect
    check_success(self, ret)   File "C:\Users\HP\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pypyodbc-1.3.4-py3.6.egg\pypyodbc.py", line 1007, in check_success
    ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)   File "C:\Users\HP\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pypyodbc-1.3.4-py3.6.egg\pypyodbc.py", line 977, in ctrl_err
    raise DataError(state,err_text) pypyodbc.DataError: ('22018', '[22018] [Microsoft][Драйвер ODBC Microsoft Access] Несоответствие типов данных в выражении условия отбора.')

【问题讨论】:

附带说明,您只是在检索数据。您只需要在应用更改时提交。因此,您的代码行 con.commit() 是多余的,应该删除。 【参考方案1】:

您使用的 SQL 看起来像 mysql,而不是 Access SQL。

在 Access SQL 中,您可以使用方括号 [] 分隔字段名称,并且不要为数字添加撇号,例如整数:

"SELECT [Law_ID] FROM Laws WHERE [Fine]=1"

如果Fine 列实际上包含一个字符串,则确实需要撇号。

【讨论】:

以上是关于无法在 Python 中显示来自 Access 的数据(通过 SQL)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Excel 中显示来自 Access 的二维数组记录集?

c#来自Access的数据不会显示在datagridview上

如何以正确的顺序显示来自 Access 的数据?

access怎么在查询中把来自两个表的值加在一起?

来自外部应用程序的 Access 数据库中日期字段的月份名称(C#)

强制 HTML 显示来自 Python 模型对象的秒数