使用 Python 和 SQLite3 写入 .txt 文件

Posted

技术标签:

【中文标题】使用 Python 和 SQLite3 写入 .txt 文件【英文标题】:Writing to a .txt file using Python and SQLite3 【发布时间】:2021-06-06 18:46:18 【问题描述】:

我目前正在从事一个学校项目,我必须使用 Python、Tkinter 和 SQLite3 创建一个带有 GUI 的数据库应用程序。我正在尝试创建一个函数,用户将在其中将 OrderID 键入表单,并且将从数据库文件中获取具有相应 OrderID 的订单详细信息并插入到文本文件中。我在尝试运行代码时收到以下错误:

  File "c:\Users\Ryan\OneDrive - C2k\A2 2020-2021\Computer Science\A2 Unit 5\Code\OrderForm.py", line 149, in PrintOrder
    write.write("-----CUSTOMER INVOICE-----", "\n".join(str(x) for x in results))
TypeError: write() takes exactly one argument (2 given)

我的代码的 sn-p 和表单的屏幕截图附在下面:

    def PrintOrder(self):
        orderid = self.OrderIDEntry.get()
        productid = self.ProductIDEntry.get()
        quantity = self.QuantityEntry.get()
        with sqlite3.connect("LeeOpt.db") as db:
            cursor = db.cursor()
            search_order = ('''SELECT * FROM Orders WHERE OrderID = ?''')
            cursor.execute(search_order, [(orderid)])
            results = cursor.fetchall()

            if results:
                for i in results:
                    write = open("orderinvoice.txt","w")
                    write.write("-----CUSTOMER INVOICE-----", "\n".join(str(x) for x in results))
                    tkinter.messagebox.showinfo("Notification","Invoice generated successfully.")
                    self.ClearEntries()
            else:
                tkinter.messagebox.showerror("Error", "No order was found with this OrderID, please try again.")
                self.ClearEntries()

【问题讨论】:

错误信息告诉你什么?你到底在做什么?您是否尝试过在错误消息中执行它希望您执行的操作? @PranavHosangadi 我需要从数据库文件的字段中写入数据。我不知道如何绕过它。 【参考方案1】:

您的问题/错误在于write.write("-----CUSTOMER INVOICE-----", "\n".join(str(x) for x in results)) 行。 write.write() 中的逗号创建 2 个参数,其中 write-function 只需要一个(要写入的文本)。我已经修改了你的代码,所以它仍然将所有结果写入单独的行。

def PrintOrder(self):
    orderid = self.OrderIDEntry.get()
    productid = self.ProductIDEntry.get()
    quantity = self.QuantityEntry.get()
    with sqlite3.connect("LeeOpt.db") as db:
        cursor = db.cursor()
        search_order = ('''SELECT * FROM Orders WHERE OrderID = ?''')
        cursor.execute(search_order, [(orderid)])
        results = cursor.fetchall()

        if results:
            for i in results:
                write = open("orderinvoice.txt","w")
                write.write("-----CUSTOMER INVOICE-----")
                for x in results:
                    write.write(str(x))
                tkinter.messagebox.showinfo("Notification","Invoice generated successfully.")
                self.ClearEntries()
        else:
            tkinter.messagebox.showerror("Error", "No order was found with this OrderID, please try again.")
            self.ClearEntries()

【讨论】:

以上是关于使用 Python 和 SQLite3 写入 .txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

python通过pandas写入sqlite3报table xxx already exists

python通过pandas写入sqlite3报table xxx already exists

Sqlite3写性能优化-每秒百万条写入

Python sqlite3选择不重复字段

数据库

数据库实践