psycopg2模块应用 | %(id)s和%s什么区别
%(id)s
和 %s
是用于参数化查询的两种不同方式,它们在执行 SQL 查询时的作用和用法不同:
-
%(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" 值替换。 -
%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
是一种位置参数。
可根据具体需求和代码中的数据结构来选择使用哪种方式。