列举:IN 与 NOT IN

57.10 列举:IN 与 NOT IN

IN (值1,值2,...) 匹配列表中任意一个,等价于多个 OR。

NOT IN 排除列表中的值;列表含 NULL 时 NOT IN 结果可能为空,需注意。

💡 IN 列表较长时用 executemany 拼占位符,不要拼接用户输入。

按班级、姓名列表查

import pymysql

conn = pymysql.connect(host='127.0.0.1', user='root', password='root', database='py_demo', charset='utf8mb4')
try:
    with conn.cursor() as cur:
        cur.execute(
            'SELECT name, class_name FROM students WHERE class_name IN (%s, %s)',
            ('一班', '二班')
        )
        print(cur.fetchall())
        names = ('小明', '小刚', '小华')
        placeholders = ','.join(['%s'] * len(names))
        cur.execute(f'SELECT name, score FROM students WHERE name IN ({placeholders})', names)
        print(cur.fetchall())
finally:
    conn.close()