7.4.5.2 命名参数
对于包含大量参数的更为复杂的查询,或者如果查询中某些参数会重复多次,则可以使用命名参数。命名参数前面有一个冒号前缀(例如,:param_name)。
import sqlite3
import sys
db_filename = 'todo.db'
project_name = sys.argv[1]
with sqlite3.connect(db_filename) as conn:
cursor = conn.cursor()
query = """
select id,priority,details,status,deadline from task
where project = :project_name
"""
cursor.execute(query,{'project_name':project_name})
for row in cursor.fetchall():
task_id,priority,details,status,deadline = row
print('{:2d} [{:d}] {:<25} [{:<8}] ({})'.format(
task_id,priority,details,status,deadline))
位置或命名参数都不需要加引号或转义,因为查询解析器会对它们做特殊处理。
运行结果:
select(选择),insert(插入)和uodate(更新)语句中都可以使用查询参数。查询中能使用字面量值的地方都可以放置查询参数。
import sqlite3
import sys
db_filename = 'todo.db'
id = int(sys.argv[1])
status = sys.argv[2]
with sqlite3.connect(db_filename) as conn:
cursor = conn.cursor()
query = "update task set status = :status where id = :id"
cursor.execute(query,{'status':status,'id':id})
这个update语句使用了两个命名参数。id值用于查找要修改的行,status值要写入数据表。
运行结果: