%(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
是一种位置参数。
可根据具体需求和代码中的数据结构来选择使用哪种方式。