【发布时间】:2021-04-17 14:43:06
【问题描述】:
我需要您的帮助来解决问题。我想用 SQLite3 在数据库中输入数据,但首先我需要从那里获取数据并进行一些计算。这里附上我的代码:
def run_query(query, parameters = ()):
with sqlite3.connect(db_name) as conn:
cursor = conn.cursor()
result = cursor.execute(query, parameters)
conn.commit()
return result
def validation():
return len(name.get()) != 0 and len(quantity.get()) !=0
def addstock():
time = datetime.now().strftime("%B %d, %Y")
hour = datetime.now().strftime("%I:%M%p")
query = 'SELECT totalstock FROM Stocks WHERE name = (?) ORDER BY MovementID DESC LIMIT 1'
parameters = (name.get(),)
lastrecord = run_query(query, parameters)
total = lastrecord.fetchall()[0]
if total is None:
total = 0
else:
total = lastrecord.fetchall()[0]
total += quantity.get()
query = 'SELECT precio FROM product WHERE name = ?'
parameters = (name.get(),)
precio = run_query(query, parameters)
pricequantity = precio.fetchall()[0]
pricequantity *= int(quantity.get())
query = 'SELECT precio FROM product WHERE name = ?'
parameters = (name.get(),)
precio = run_query(query, parameters)
priceforall = precio.fetchall()[0]
priceforall *= total
if validation():
query = 'INSERT INTO stocks VALUES(NULL, ?, ?, ?, ?, ?, ?, ?)'
parameters = (name.get(), quantity.get(), pricequantity, total, priceforall, time, hour)
run_query(query, parameters)
message = 'Stock for {} added succesfully'.format(name.get())
name.delete(0, END)
quantity.delete(0, END)
else:
message = 'Name and Quantity required'
数据库中有以下数据:
MovementID(整数)、名称(文本)、数量(真实)、数量价格(真实)、TotalStock(真实)、TotalStockPrice(真实)、时间、小时
问题是我收到 lastrecord.fetchall()[0] 的错误,它说 Index out of range 但我不知道为什么。
其他时候,我有一个错误,只能将元组(不是“str”)连接到元组。
我是python和编程的初学者,不知道如何解决这些问题。
感谢和亲切的问候
【问题讨论】:
-
如果您在
lastrecord.fetchall()[0]上遇到索引错误,这意味着lastrecord.fetchall()正在返回一个空列表。您需要为此做好准备,或者尝试找出它为什么没有返回任何内容.
标签: python python-3.x list sqlite tkinter