【问题标题】:Python 3 MySQL using question mark placeholdersPython 3 MySQL 使用问号占位符
【发布时间】:2018-10-22 17:11:23
【问题描述】:

我正在寻找一种将列表中的值放入准备好的 SQL 字符串的方法,该字符串有问号作为占位符。我以前在 PyQT 中使用过这个,但是我使用了 bindValue 函数。使用 pymysql 似乎没有这样的功能。

这是我准备的 SQL 字符串类型的示例:

INSERT INTO my_table (`Column1Name`, `Column2Name`, `Column3Name`) VALUES (?,?,?);

然后我有一个值列表,我希望插入(或链接到)问号占位符。

my_values_list['string_1', '3', 'anothervalue']

就像我说的,我以前在 PyQT 中使用过这种方法,所以我知道这个'?占位符方法有效,但没有 bindValue 函数,我看不到如何使用 pymysql 使其工作。

下面是我如何使用 PyQT 的 QSqlQuery bindValues 函数让它工作的,如果有帮助的话,其中 query.exec_() 执行 SQL 字符串:

if my_values_list:
        [self.query.bindValue(i, my_values_list[i]) for i in range(len(my_values_list))]
self.query.exec_()

【问题讨论】:

    标签: mysql python-3.x pymysql


    【解决方案1】:

    以下是如何使用 PyMySQL 执行此操作的示例:

    query = 'INSERT INTO my_table (Column1Name, Column2Name, Column3Name) VALUES (%s, %s, %s);'
    cur.execute(query, ('string_1', '3', 'anothervalue', ))
    

    ? 在这里不是有效的占位符,但%s 是有效的。

    【讨论】:

    • 谢谢蒂姆,我希望避免区分占位符类型,如字符串的 %s 等,我知道“?”占位符有效,至少当我在 PyQt 的 QSqlQuery bindValue 函数中使用它时。但是,您的建议确实让我更进一步。
    • @MikG Read here,表示“PyMySQL 将包括整数在内的所有对象转换为格式化和带引号的字符串。您只能使用 %s 或 %(name)s 作为占位符。”
    【解决方案2】:

    也许这篇文章对你有帮助,它已经很老了,但它仍然主要是有效的 AFAIU,我发现它给了我一个很好的概述: What does a question mark represent in SQL queries?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 2014-10-07
      • 2018-06-04
      • 1970-01-01
      • 2018-01-17
      • 2012-08-24
      相关资源
      最近更新 更多