python - 如果不满足条件,则返回该用户的数据,否则另一个查询

标签 python mysql pymysql

我有一个包含这些数据的表格:

  ID, Name, LastName, Date, Type

我必须在表中查询 ID 为 1 的用户。 获取该行,如果该用户的 Type 不为 2,则返回该用户,否则返回具有相同 LastName 和 Date 的所有用户。

最有效的方法是什么? 我所做的是:

query1 = SELECT * FROM clients where ID = 1

query2 = SELECT * FROM client WHERE LastName = %s AND Date= %s

我执行第一个查询

 cursor.execute(sql)
 rows = cursor.fetchall()
 for row in rows:
     if(row['Type'] ==2 )
          cursor.execute(sql2(row['LastName'], row['Date']))
     Save results
      else
          results = rows?

是否有更有效的方法使用连接来做到这一点? 例如,如果我只有左连接,我如何询问用户的类型是否为 2 ? 如果要返回多行,如何将它们分配给Python中的对象数组?

最佳答案

只需执行两个查询即可避免此处出现循环:

q1 = """
     SELECT c.* FROM clients c where c.ID = 1
     """

q2 = """
     SELECT b.* FROM clients b
     JOIN (SELECT c.* FROM
           clients c
           c.ID = 1 
           AND
           c.Type = 2) a
     ON
     a.LastName = b.LastName
     AND
     a.Date = b.Date
     """

然后您只需执行这两个查询即可获得所需的所有结果,而无需循环,因为您的循环将执行 n 个查询,其中 n 等于匹配的行数,而不是在一次连接中获取所有行数。没有更多细节作为最终结果所需的数据结构,因为您似乎只关心保存结果,这应该给您您想要的。

关于python - 如果不满足条件,则返回该用户的数据,否则另一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48978504/

相关文章:

php - Laravel 在没有数据库的情况下连接 MySQL

mysql - 有没有办法获取变量并将它们添加为 SQL 中左连接后的列?

php - MySQL查询中的IF语句

python - pymysql(python3.5)INSERT后如何返回最后一个主键?

amazon-web-services - 适用于tensorflow和pymysql的Sagemaker内核

python - 为什么日志记录在 python 中以这种方式运行

python - 尝试使用 Python 从联网设备上的 TCP 套接字连接获取数据

python - 当我没有为 openGLWidget 创建额外的类时,为什么 glRotate 只工作一次?

python - 如何使用mock.patch覆盖Django View 进行测试?

python - 有没有办法将 mysql 列值保存在 python 变量中?