Python 如何检查此数据库中的项目是否可用(sqlite3)
SQL数据库附加为照片 在任何给定时刻,项目_id 12的最大允许数量为7。 我想写一个程序,接受用户的订单,并检查数据库,看看他们想要的数量是否在他们想要的时候可用。 用户将输入开始日期、结束日期和数量 我已经尝试了很多方法,但我的代码似乎只检查与用户相同的确切日期开始的订单,而不是具有重叠时间范围的同一项目的所有订单 这是我到目前为止编写的代码: 任何帮助都将不胜感激,需要将此功能添加到我的年终计划中Python 如何检查此数据库中的项目是否可用(sqlite3),python,sql,python-3.x,sqlite,python-3.6,Python,Sql,Python 3.x,Sqlite,Python 3.6,SQL数据库附加为照片 在任何给定时刻,项目_id 12的最大允许数量为7。 我想写一个程序,接受用户的订单,并检查数据库,看看他们想要的数量是否在他们想要的时候可用。 用户将输入开始日期、结束日期和数量 我已经尝试了很多方法,但我的代码似乎只检查与用户相同的确切日期开始的订单,而不是具有重叠时间范围的同一项目的所有订单 这是我到目前为止编写的代码: 任何帮助都将不胜感激,需要将此功能添加到我的年终计划中 lines = ["EACKAH",12] conn = sqlite3.
lines = ["EACKAH",12]
conn = sqlite3.connect("accounts.sqlite3")
cur = conn.cursor()
cur.execute("SELECT start_date,end_date,duration,quantity FROM hirers WHERE item_id=?", (str(lines[1]),))
data = cur.fetchall()
print(data)
cur.execute("SELECT quantity FROM on_sale WHERE item_id=?", (str(lines[1]),))
max_qty = cur.fetchall()
item_max = int(max_qty[0][0])
cur.close()
duration = [0.5,1,1.5,2.5,3]
#load the desired quantity by the user
qty_num = 0
if (self.qty_entry.get()).isdigit() == True and int(self.qty_entry.get()) < 100:
qty_num = int(self.qty_entry.get())
else:
qty_num = 0
print("i..........", qty_num)
#duration the user wants to hire the tool for
self.index_duration = int(self.duration_list.curselection()[0])
end_num = int(round(duration[self.index_duration],0))
print("The user wants it for", end_num)
check_count = 0
if len(data) == 0:
print("All Good")
else:
for i in data:
lst = i
print(lst)
in_between = []
counter = 0
dur = int(lst[2])
sql_qty = lst[3]
date_check = []
while counter != dur:
date_1 = datetime.datetime.strptime(str(lst[0]), "%d-%m-%Y")
end_date = date_1 + datetime.timedelta(days=counter)
date_check.append(end_date.strftime('%d-%m-%Y'))
counter = counter + 1
print(date_check)
print("..........")
for i in date_check:
#load the current date
d = datetime.datetime.strptime(str(self.date_entry.get()), "%d-%m-%Y")
end = d + datetime.timedelta(days = end_num)
#check for date overlaps
if i == str(self.date_entry.get()) or i == end.strftime('%d-%m-%Y'):
#check quantity on overlap days
if int(item_max) - int(sql_qty) <= qty_num:
check_count = 0
else:
check_count = check_count + 1
else:
check_count = 0
if check_count == 0:
self.old_date_check = True
else:
self.old_date_check = False
print(self.old_date_check)
我这样想:
首次将数据库中的日期格式更改为yyyy mm dd
将用户想要的日期放入一个数组y_数组中,并在该数组中循环,记住将每天都放入其中-如果用户要求从2018年1月1日到2018年3月1日,则必须放入2018-01-01、2018-01-02和2018-01-03等
在该循环中,执行以下sql:
SELECT sum(quantity) sum_quantity FROM hirers WHERE item_id= x and y between start_date and end_date
在整个循环中保持变量和的最大值
循环结束后,您将在用户选择租用的天数之间租用一天的最大物品数量sqll查询的持续时间意味着什么?什么是持续时间=[0.5,1,1.5,2.5,3]?@DejanDozet开始日期和结束日期之间的差异date@DejanDozet这是允许的日子,你可以有一个项目,因为它总是很难阅读其他人的代码,这是我很难理解,那么,您同意我尝试创建一个查询,以便您可以执行以获得所需的结果吗?@DejanDozet当然,我会解释您需要我解释的任何内容