"TypeError: NoneType is not subscriptable" when executing multiple queries

"TypeError: NoneType is not subscriptable" when executing multiple queries

检索数据库的成员函数。

def GetDb(self):
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = sqlite3.connect(self.path)       
        db.row_factory = sqlite3.Row         
    return db

returns 从数据库查询中列出的成员函数

def GetOrderItemsList(self, orderid):
    list = []
    with app.app_context():
        db = self.GetDb()             
        cur = db.execute('SELECT * FROM ordersList WHERE orderId = ?',[orderid])
        records = cur.fetchall(); 
        for row in records:                
            print(row)
            invid = row['inventoryId']
            OrderItem 
            OrderItem.orderId = row['orderId']
            OrderItem.productId = row['inventoryId']             
            OrderItem.productName = 'none'
            OrderItem.quantity = row['quantity']
            OrderItem.productPrice = row['price'] 
            nextcur = db.execute('SELECT * FROM inventory WHERE invId = ?', [invid]) 
             
            #nextcur = db.execute('SELECT * FROM inventory WHERE invId = 1') #works
            res = nextcur.fetchone();
            OrderItem.productName = res['invName']
            print(res['invName'])                
            list.append(OrderItem)


    return list

订单项:

class OrderItem(object):     
     def __init__(self, ordId, invId, name, quantity, price):
         self.orderId = ordId
         self.productId = invId
         self.productName = name
         self.quantity = quantity
         self.productPrice = price

错误信息:

Traceback error
OrderItem.productName = res['invName']
TypeError: 'NoneType' object is not subscriptable

错误

nextcur = db.execute('SELECT * FROM inventory WHERE invId = ?', [invid]) 

有效

nextcur = db.execute('SELECT * FROM inventory WHERE invId = 1')

为此奋斗了好几个小时。在 google 上搜索。在这里阅读问题。

如有任何帮助,我们将不胜感激。

错误

'NoneType' object is not subscriptable

表示您正在尝试访问不存在的对象的对象键,即该对象是 None.

请在此处检查

[invid]

invid不是None,即打印(invid)

此外,问题可能出在这里

res['invName']

resNone,请在访问invName之前检查res的内容(打印等),因为它是None

修复订单产品列表的连接、项目实例和 img。

库存和订单商品

create table inventory(invId integer PRIMARY KEY AUTOINCREMENT NOT NULL, invName varchar(50), description varchar(100), invImg varchar(50) ,category integer ,quantity integer, price real);
create table ordersList(orderId integer, inventoryId integer, orderQuantity integer, orderPrice real);

class OrderItem(object):
def __init__(self, ordId, invId, img, name, quantity, price):
self.orderId = ordId
self.productId = invId
self.productName = name
self.productImg = img
self.quantity = quantity
self.productPrice = price

def GetOrderItemsList(orderid):
list = []
db = get_db()
cur = db.execute('SELECT orderId, inventoryId, orderQuantity, orderPrice,
inventory.invName AS invName, inventory.invImg AS invImg FROM ordersList INNERJOIN
inventory ON inventory.invId= ordersList.inventoryId WHERE orderId = ?', [orderid])
records = cur.fetchall();
for row in records:
item = OrderItem(row['orderId'], row['inventoryId'],
row['invImg'], row['invName'],
row['orderQuantity'], row['orderPrice'] )
list.append(item)
return list