📜  如何编写一个函数来有条件地按多列从数据库中获取行?(1)

📅  最后修改于: 2023-12-03 15:38:53.046000             🧑  作者: Mango

如何编写一个函数来有条件地按多列从数据库中获取行?

在进行数据库操作时,我们有时需要根据多个条件从数据库中获取特定的数据行。这时,我们可以编写一个函数来实现这个过程。

函数原型
def get_rows_by_columns(table_name: str, columns: list, conditions: dict):
    """
    从指定的数据库表中,按照指定的列和条件获取相应的数据行

    :param table_name: 数据库表名
    :param columns: 需要获取的列名
    :param conditions: 获取数据行的条件,为字典类型,格式为{列名: 值}
    :return: 返回符合条件的数据行
    """
函数设计思路

该函数的设计思路为:

  1. 构造SQL语句
  2. 执行SQL语句获取数据行
  3. 返回符合条件的数据行
代码实现
import pymysql

def get_rows_by_columns(table_name: str, columns: list, conditions: dict):
    # 连接数据库
    conn = pymysql.connect(host='localhost', user='root', password='password', db='test', charset='utf8mb4',
                           cursorclass=pymysql.cursors.DictCursor)

    # 构造SQL语句
    columns_str = ', '.join(columns)
    conditions_str = ' AND '.join([f"{k}='{v}'" for k, v in conditions.items()])
    sql = f"SELECT {columns_str} FROM {table_name} WHERE {conditions_str}"

    # 执行SQL语句获取数据行
    try:
        with conn.cursor() as cursor:
            cursor.execute(sql)
            result = cursor.fetchall()
            return result
    finally:
        # 关闭数据库连接
        conn.close()
使用方法

使用该函数时,我们可以根据具体情况调用函数并传入相应的参数即可。以下是一个示例:

table_name = "students"
columns = ["name", "age", "sex", "score"]
conditions = {"sex": "male", "score": ">=90"}
result = get_rows_by_columns(table_name, columns, conditions)
print(result)

这段示例代码会从名为"students"的表中获取性别为男且分数大于等于90的学生的姓名、年龄、性别和分数信息。获取到的信息将以字典列表的形式返回,并通过print函数输出。