执行多个查询时出现“TypeError: NoneType is not subscriptable”
Posted
技术标签:
【中文标题】执行多个查询时出现“TypeError: NoneType is not subscriptable”【英文标题】:"TypeError: NoneType is not subscriptable" when executing multiple queries 【发布时间】:2021-12-26 11:35:48 【问题描述】:检索数据库的成员函数。
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
从数据库查询返回列表的成员函数
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')
为此奋斗了好几个小时。在谷歌上搜索。在此处阅读问题。
任何帮助将不胜感激。
【问题讨论】:
不,这个问题不应该被删除。其他人可能会遇到与您完全相同的问题。请检查它是哪个原因(“invId off”或“不明确的列名”)并写下您自己的答案来解释问题,您可能会以这种方式帮助某人。在这个网站上回答你自己的问题很好(甚至鼓励)。 我很可能对 invId 有疏忽。通过连接简化了这一点,但直到我进入 sql 终端并看到列名错误时才意识到问题出在哪里。 【参考方案1】:错误
'NoneType' object is not subscriptable
表示您正在尝试访问不存在的对象的对象键,即对象为None
。
请看这里
[invid]
invid
不是 None,即打印(invid)
另外,问题可能出在此处
res['invName']
res
是None
,请在访问invName
之前检查res
的内容(带有打印等),因为它是None
。
【讨论】:
已修复。我要么在表中关闭了 invId,要么在不同表中的相同列名导致了这种情况。此问题可以删除。【参考方案2】:修复订单产品列表的连接、项目实例和 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();
@987654337 @ item = OrderItem(row['orderId'], row['inventoryId'],
row['invImg'], row['invName'],
row['orderQuantity'], row['orderPrice'] )
list.append(item)
return list
【讨论】:
以上是关于执行多个查询时出现“TypeError: NoneType is not subscriptable”的主要内容,如果未能解决你的问题,请参考以下文章
执行 SQL 查询时出现 Wix 错误 -2147217900