Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查此数据库中的项目是否可用(sqlite3)_Python_Sql_Python 3.x_Sqlite_Python 3.6 - Fatal编程技术网

Python 如何检查此数据库中的项目是否可用(sqlite3)

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.

SQL数据库附加为照片

在任何给定时刻,项目_id 12的最大允许数量为7。 我想写一个程序,接受用户的订单,并检查数据库,看看他们想要的数量是否在他们想要的时候可用。 用户将输入开始日期、结束日期和数量

我已经尝试了很多方法,但我的代码似乎只检查与用户相同的确切日期开始的订单,而不是具有重叠时间范围的同一项目的所有订单

这是我到目前为止编写的代码: 任何帮助都将不胜感激,需要将此功能添加到我的年终计划中

    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当然,我会解释您需要我解释的任何内容