【问题标题】:PyMySql pass query as a parameter to sql statementPyMySql 将查询作为参数传递给 sql 语句
【发布时间】:2020-11-24 23:38:28
【问题描述】:

相当了解使用 pymysql 和 python 将参数传递给 SELECT 语句。只是把它扔在那里,但是否可以将查询作为参数传递给 sql 语句?比如:

sqlCmd = """SELECT * from mytable where coadataid=%s"""
cur.execute(sqlCmd,("""ANY(SELECT recordid FROM coadata WHERE flowtype='1')""",))

显然,上述方法行不通,但我正在寻找一种方法来让这样的东西工作。有什么想法吗?

【问题讨论】:

  • 在我看来您有两个查询,并且您试图将第一个查询的结果作为第二个查询的参数传递。这个假设对吗?
  • 实际上,并非如此:传递给服务器的最终查询应如下所示:SELECT * from mytable WHERE coadataid=ANY(SELECT recordid FROM coadata WHERE flowtype='1')

标签: python pymysql


【解决方案1】:

参数总是被替换为文字值,它们不是 MySQL 将评估的表达式。这就是参数如何防止 SQL 注入。

您可以使用普通字符串格式将子查询替换为主查询,并使用cursor.execute() 参数填充子查询中的值。

cur.execute(sqlCmd % ("""ANY(SELECT recordid FROM coadata WHERE flowtype=%s)""",), ('1',))

【讨论】:

  • ANY 严格来说是内部的。尝试为表构建一个通用类,以允许我传递过滤器或参数。
  • 您正在尝试设计自己的 ORM,而不是使用已经存在的东西,例如 SQLAlchemy?
  • 不,只是几个自定义类。
  • 所以你想从过滤参数动态构建WHERE flowtype = '1'?这是一个完全不同的问题。
  • 只是在寻找一种将 WHERE 子句作为过滤器传递的方法。参考我原来的问题。这两个表是相关联的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2013-03-22
  • 2013-08-02
相关资源
最近更新 更多