首页 > 解决方案 > 尝试使用 SQLite 数据库和 Python 按顺序为每个项目创建记录

问题描述

我相信我需要将 sql 语句扩展为我拥有的当前语句:

SELECT OrderID FROM Orders WHERE UserID = (?)

以后有多个订单的用户很可能会出问题。有没有一种方法可以组合选择和使用订单表中的自动递增 orderID?

作为参考,我的数据库如下所示:
数据库

而我目前拥有的python是这样的,但是我觉得它可能必须完全重写。

results[0][0]是用户表中当前用户的 ID

  elif userinput == "5":
            basket = []
            print(pd.read_sql_query('SELECT * FROM Products', conn))

            shopping = True
            while shopping:

                itemToAdd = input("Please enter the ID of the item to add to the basket: ")
                basket.append(itemToAdd)
                print(basket)
                continueShop = input("Continue shopping?(y/n): ")
                if continueShop == "n":
                    conn.execute("INSERT INTO Orders (UserID) VALUES (?)", (results[0][0],))
                    conn.commit()
                    counter = 0
                    for items in basket:
                        createOrderItems = "INSERT INTO OrderItems (OrderID, ProductID) VALUES (?,?)"
                        currentOrder = ("SELECT OrderID FROM Orders WHERE UserID = (?) ", (results[0][0]))
                        conn.execute(createOrderItems, (currentOrder[0], basket[counter]))
                        counter = +1
                        conn.commit()

因为数据库是使用 DB Browser 应用程序构建的,所以我真的不知道如何访问我需要确保选择正确记录的部分。任何帮助表示赞赏,谢谢。

此外,由于每个表的主键都是自动递增的,我需要一种方法来仅选择刚刚创建的记录使用

   conn.execute("INSERT INTO Orders (UserID) VALUES (?)", 

但是,即使订单表中的记录是唯一的,我也想不出一种方法,因为据我所知,无法知道哪个订单是需要查看的订单

标签: pythonsqlite

解决方案


您可以使用游标对象的lastrowid属性来查找插入订单的 id。然后在 select 语句中使用复合 WHERE(即 WHERE userid = something 和 orderid = something_else)。


推荐阅读