大家好我的代码中有问题我尝试在树视图的数据库中显示我的表格,但我不能看到这个错误" TypeError:' sqlite3.Cursor&#39 ;对象不是可订阅的" 可能是因为我的数据库中有三个表,这些是我的代码的一部分:
tv=ttk.Treeview(root)
tv.place(x=24,y=335)
style = ttk.Style(root)
style.configure('Treeview', rowheight=30)
tv.heading('#0',text="ID")
tv.column("#0",width=99)
tv.configure(column=('#Type','#Code','#Designation','#Prix achat'))
tv.heading('#Type',text="Type")
tv.heading('#Code',text="Code")
tv.heading('#Designation',text="Designation")
tv.heading('#Prix achat',text="Prix achat (DZA)")
cur=issam.tree_select()
for i in cur:
tv.insert('','end','#{}'.format(i['ID']),text=i['ID'])
tv.set('#{}'.format(i['ID']),'#Type',i['type'])
tv.set('#{}'.format(i['ID']),'#Code',i['Code'])
tv.set('#{}'.format(i['ID']),'#Designation',i['Designation'])
tv.set('#{}'.format(i['ID']),'#Prix achat',i['pa'])
这些是数据库文件中的函数(在类中):
def tree_select(self):
cursor=self.db.execute('SELECT * FROM poisson ')
cur2=self.db.execute('SELECT * FROM plant')
cur3=self.db.execute('SELECT * FROM materiel')
return (cursor,cur2,cur3) #the problem is here
答案 0 :(得分:0)
TypeError:' sqlite3.Cursor'对象不可订阅
您正试图从光标中获取项目,这就是原因。
函数tree_select
返回游标元组:
tree_select() -> (<sqlite3.Cursor>, <sqlite3.Cursor>, <sqlite3.Cursor>)
之后你迭代这些游标:
cur=issam.tree_select()
for i in cur:
...
之后,您尝试通过游标中的键提取值(在每个迭代步骤中):
tv.set('#{}'.format(i['ID']),'#Type',i['type']) # i - is sqlite3.Cursor object
其中i
是sqlite3.Cursor
,但失败并显示错误:'sqlite3.Cursor' object is not subscriptable
这是一个小例子,如何从字典中提取值:
import sqlite3
def row2dict(cursor, row):
result = dict()
for idx, col in enumerate(cursor.description):
result[col[0]] = row[idx]
return result
db = sqlite3.connect(":memory:")
db.row_factory = row2dict
cursor = db.cursor()
cursor.execute("select 1 as ID, 'john' as name")
row = cursor.fetchone()
print row['ID'], row['name']
cursor.close()
db.close()