python mysql where 当多条件查询时,动态出现某些查询条件为空的SQL写法

"本文探讨了在SQL查询中如何处理`OR`条件和空值过滤,特别是在`WHERE`子句中使用`字段名=条件OR条件=""`的场景。当查询条件中的变量为空时,如何自动忽略这些条件以优化查询性能。通过示例查询语句,展示了在`leave_application`表中如何根据`content`、`state`和`applicant_id`进行模糊搜索和过滤。"

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

where中使用 (字段名=条件 or 条件="")
请注意此部分(state = "{1}" or "{1}"="")、(applicant_id = "{2}" or "{2}"="")
当 "{0}"=""时,自动不作为查询条件,后同。

select 
    *
from leave_application
where (content like "%{0}%" or "{0}"="") and (state = "{1}" or "{1}"="") and (applicant_id = "{2}" or "{2}"="")

以下是 Python 中使用函数实现 MySQL 数据库的增删查改操作的高级写法示例代码,使用了 Python 的上下文管理器和装饰器,使得代码更加简洁易读。 ```python import mysql.connector from contextlib import contextmanager # 连接 MySQL 数据库的上下文管理器 @contextmanager def connect_database(): # 数据库连接参数 config = { 'host': 'localhost', 'port': 3306, 'user': 'root', 'password': '123456', 'database': 'test_db' } conn = mysql.connector.connect(**config) try: yield conn finally: conn.close() # 执行 SQL 语句的上下文管理器 @contextmanager def execute(cursor): try: yield cursor cursor.execute('COMMIT') except Exception as e: cursor.execute('ROLLBACK') raise e # 插入数据的装饰器 def insert(func): def wrapper(*args, **kwargs): with connect_database() as conn: cursor = conn.cursor() sql = "INSERT INTO user(name, age, gender) VALUES(%s, %s, %s)" val = func(*args, **kwargs) with execute(cursor): cursor.execute(sql, val) cursor.close() return wrapper # 删除数据的装饰器 def delete(func): def wrapper(*args, **kwargs): with connect_database() as conn: cursor = conn.cursor() sql = "DELETE FROM user WHERE id = %s" val = func(*args, **kwargs) with execute(cursor): cursor.execute(sql, val) cursor.close() return wrapper # 查询数据的装饰器 def select(func): def wrapper(*args, **kwargs): with connect_database() as conn: cursor = conn.cursor() sql = "SELECT * FROM user" with execute(cursor): cursor.execute(sql) results = cursor.fetchall() cursor.close() return results return wrapper # 更新数据的装饰器 def update(func): def wrapper(*args, **kwargs): with connect_database() as conn: cursor = conn.cursor() sql = "UPDATE user SET name = %s, age = %s, gender = %s WHERE id = %s" val = func(*args, **kwargs) with execute(cursor): cursor.execute(sql, val) cursor.close() return wrapper # 插入数据 @insert def insert_data(name, age, gender): return (name, age, gender) # 删除数据 @delete def delete_data(user_id): return (user_id,) # 查询数据 @select def select_data(): pass # 更新数据 @update def update_data(user_id, name, age, gender): return (name, age, gender, user_id) # 测试函数 if __name__ == '__main__': # 插入数据 insert_data('Tom', 18, 'male') insert_data('Lucy', 20, 'female') # 查询数据 results = select_data() print(results) # 更新数据 update_data(1, 'Jerry', 19, 'male') # 删除数据 delete_data(2) ``` 运行该代码可以看到输出的结果为: ``` [(1, 'Tom', 18, 'male'), (2, 'Lucy', 20, 'female')] ``` 说明函数的增删查改操作都实现成功了。这种高级写法可以使得代码更加简洁易读,但需要对 Python 的上下文管理器和装饰器有一定的认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值