【问题标题】:python SQL Variables in SELECT /WHERE [duplicate]SELECT /WHERE中的python SQL变量[重复]
【发布时间】:2013-08-19 18:16:16
【问题描述】:

我在传递变量时遇到问题

query7 = QSqlQuery ("SELECT Exemplo FROM TabelaSubst WHERE Palavra="+text+" ORDER BY Exemple ASC;")

我得到任何像这样传递我的变量文本的东西。 如果我打印 query7.next() 我得到了错误..

我的程序使用 PYQT,我有一个组合框,当我从中选择一些文本时,我将此文本传递给我的变量“文本”,我想在我的 Where Palavra = 文本中使用它 em>,但我不知道该怎么做。我这样做是因为有了它我会得到这些文本的例子并将它放在一个 qtablewidget 中..

当我用一个词搜索时,比如

query7 = QSqlQuery ("SELECT Exemplo FROM TabelaSubst WHERE Palavra='ronaldo' ORDER BY Exemple ASC;")

.. 没关系.. 我的桌子上有例子... 但是,如果我为可变文本更改“ronaldo”,我会得到任何东西..

我创建表格以放置示例的方式是:

index1 = 0

while (query7.next()):
        self.tableWidget.setItem(index1,0,QTableWidgetItem(query7.value(0).toString()))  
        index1 = index1+1

【问题讨论】:

    标签: python sql pyqt qsqlquery


    【解决方案1】:

    要么将text 括在引号中,要么将引号放入查询字符串中。例如:

    text = "'%s'" % text
    

    query7 = QSqlQuery ("SELECT Exemplo FROM TabelaSubst WHERE Palavra='"+text+"' ORDER BY Exemple ASC;")
    

    【讨论】:

    • 这两种方法都会让您的应用程序对 SQL 注入开放。
    • 没错,我刚刚注意到text 来自一个组合框。在传递给查询之前应该对其进行清理。
    • 当我使用您的 query7 = QSqlQuery ("SELECT Exemplo FROM TabelaSubst WHERE Palavra='"+text+"' ORDER BY Example ASC;") 打印 query7.next() 时,我仍然会出错我为 ronaldo 更改“+text+”并打印 query7.next() 它返回 true
    • 并且“文本”来自我的数据库。我首先将我的数据库中的一些文本打开到组合框中,然后我想搜索这个词,以它为例并在我的 qtablewidget 中使用它
    • 您可以通过在创建值时打印值来调试程序。将您的查询字符串放入一个临时变量并打印出来,这样您就可以准确地看到它的样子。然后打印出query7的值,以此类推。
    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    相关资源
    最近更新 更多