我希望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] Несоответствие типов данных в выражении условия отбора.')
答案 0 :(得分:1)
您使用的SQL看起来像MySQL,而不是Access SQL。
在Access SQL中,您使用方括号[]
来分隔字段名称,并且不为数字添加撇号,如整数:
"SELECT [Law_ID] FROM Laws WHERE [Fine]=1"
如果Fine
列实际上包含字符串,则需要撇号。