Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 如何使按钮将数据插入我的数据库?_Python_Sqlite_Pyqt5 - Fatal编程技术网

Python 如何使按钮将数据插入我的数据库?

Python 如何使按钮将数据插入我的数据库?,python,sqlite,pyqt5,Python,Sqlite,Pyqt5,我正在做一个小的python产品注册程序,但是数据库没有打开 我尝试使用sqlite3库打开,并根据建议尝试使用QSqlDatabase,但没有任何效果。这个错误可能是什么?如何解决和连接 我更改了数据库连接 path = r'C:\Users\Daniel\Desktop\Sistema NaruHodo\Banco de Dados' conn = sqlite3.connect(path+r'\produtos.db') cursor = conn.cursor() 错误: 这是我用来获

我正在做一个小的python产品注册程序,但是数据库没有打开

我尝试使用sqlite3库打开,并根据建议尝试使用QSqlDatabase,但没有任何效果。这个错误可能是什么?如何解决和连接

我更改了数据库连接

path = r'C:\Users\Daniel\Desktop\Sistema NaruHodo\Banco de Dados'
conn = sqlite3.connect(path+r'\produtos.db')
cursor = conn.cursor()
错误:

这是我用来获取字段数据并将其插入数据库的def

    def addProduto(self, produtotext, estoquetext, precocustotext, precovendatext, fornecedorcomboBox):
        path = r'C:\Users\Daniel\Desktop\Sistema NaruHodo\Banco de Dados'
        conn = sqlite3.connect(path+r'\produtos.db')
        produto = str(self.produtotext.text())
        estoque = float(self.estoquetext.text())
        precocusto = float(self.precocustotext.text())
        precovenda = float(self.precovendatext.text())
        fornecedor = str(self.fornecedorcomboBox.currentText())
        conn.execute(f"""INSERT INTO produ VALUES (null, {produto}, {estoque}, {precocusto}, {precovenda}, {fornecedor})""")
        conn.commit()

看起来您正试图在表中显示数据库。我建议使用创建到数据库的连接(它确实支持SQLite驱动程序)。使用它而不是sqlite3可以更好地与PyQt5框架集成。具体来说,它可以很容易地与连接,然后用显示。对于这种方法,我建议您熟悉。它可能看起来比您当前使用的
QTableWidget
更复杂,但它提供的轻松数据库集成非常值得


请原谅PySide2的一些文档链接;不幸的是,PyQt5文档并不完全完整。

我解决了这个问题,使用QSqlDatabase,它不接受并给出了驱动程序错误,所以我返回sqlite3。但它仍然崩溃,甚至连上了,所以我发现问题确实出在我没有转换成字符串的函数中

    def addProduto(self):
        self.banco = sqlite3.connect('Vendas.db')
        self.cursor = banco.cursor()
        Nome = self.produtotext.text()
        Quant = self.estoquetext.text()
        Valor = self.precocustotext.text()
        Preco = self.precovendatext.text()
        Forn = self.fornecedorcomboBox.currentText()
        if Nome != '' or Quant != '' or Valor != '' or Preco != '' or Forn != '':
            self.banco.execute(f"""INSERT INTO Produtos VALUES ('{Nome}',{Quant}, {Valor}, {Preco}, '{Forn}')""")
            self.banco.commit()
            self.LoadDatabase()
            self.limparcampos()

您是否成功地将按钮连接到一个功能,该功能可以执行一些简单的操作,例如打印某些内容?是的,它工作正常!嗯,你可以有几个账户,但我们的想法是不要滥用它,在你的情况下,似乎你想在两个账户中都有两个内容相同的问题,因此,您应该保留问题的原样或删除其中一个问题。它应该是
addDatabase()
而不是
database()
。您说得对,谢谢。我稍后会这样做,但表中还没有显示任何内容,我还没有将它连接到数据库,我只是想让按钮将数据保存到数据库中,而不向表显示数据,但不幸的是,当我单击按钮时,程序崩溃了。我认为我的角色可能是错的。但是谢谢你的建议,我会在表中显示时使用它。你认为使用PySide2更有益吗?我意识到我没有回答你眼前的问题,但我觉得你在处理程序的方式上走错了路,认为继续下去是有害的。关于PySide2,我更喜欢它,主要是因为它有许可证,但与PyQt5相比,它也是一个好主意。不管怎样,PySID2 DOC对于PyQT5或多或少都是有用的,因为这两个库都非常忠实于基于它们的C++版本。我甚至使用C++文档,因为它比较方便。我发现问题是在没有连接的数据库上,我去编辑这个问题。
    def addProduto(self):
        self.banco = sqlite3.connect('Vendas.db')
        self.cursor = banco.cursor()
        Nome = self.produtotext.text()
        Quant = self.estoquetext.text()
        Valor = self.precocustotext.text()
        Preco = self.precovendatext.text()
        Forn = self.fornecedorcomboBox.currentText()
        if Nome != '' or Quant != '' or Valor != '' or Preco != '' or Forn != '':
            self.banco.execute(f"""INSERT INTO Produtos VALUES ('{Nome}',{Quant}, {Valor}, {Preco}, '{Forn}')""")
            self.banco.commit()
            self.LoadDatabase()
            self.limparcampos()