psycopg2模块应用 | %(id)s和%s什么区别

%(id)s%s 是用于参数化查询的两种不同方式,它们在执行 SQL 查询时的作用和用法不同:

  1. %(id)s:这是一种命名参数的方式,通常在使用字典传递参数时使用。它表示一个占位符,其中 "id" 是参数的名称。在执行 SQL 查询时,实际的参数值将从字典中根据名称提取并替换占位符。这种方式通常在使用 psycopg2 或类似库时用于参数化查询。

    例如,如果有以下查询:

     # 要插入的数据列表,每个元素是一个字典
     data_to_insert = [
         {'id': 1, 'first_name': 'John', 'last_name': 'Doe'},
         {'id': 2, 'first_name': 'Jane', 'last_name': 'Smith'},
         {'id': 3, 'first_name': 'Bob', 'last_name': 'Johnson'}
     ]
    cursor.execute("INSERT INTO users(id, name) VALUES (%(id)s, %(name)s)", {'id': 1, 'name': 'John'})
    

    %(id)s%(name)s 是命名参数,它们将分别用字典中的 "id" 和 "name" 值替换。

  2. %s:这是一种位置参数的方式,通常在使用元组传递参数时使用。它表示一个占位符,表示参数的位置。在执行 SQL 查询时,实际的参数值将按顺序从元组中提取并替换占位符。这种方式通常在执行参数化查询时使用。

    例如,如果有以下查询:

     # 要插入的数据列表
     data_to_insert = [
         (1, 'John', 'Doe'),
         (2, 'Jane', 'Smith'),
         (3, 'Bob', 'Johnson')
     ]
    cursor.execute("INSERT INTO users(id, name) VALUES (%s, %s)", (1, 'John'))
    

    %s 是位置参数,它们将分别用元组中的值 1 和 'John' 替换。

总的来说,%(id)s%s 都用于在 SQL 查询中插入参数,但它们的使用方式和传递参数的方式有所不同。

%(id)s 是一种命名参数,而 %s 是一种位置参数。

可根据具体需求和代码中的数据结构来选择使用哪种方式。

posted @ 2023-09-03 00:01  槑孒  阅读(82)  评论(0编辑  收藏  举报