在处理表单提交后,后端 SQL 查询部分空值和部分模糊值时,可以使用 SQLModel 构建动态查询。你可以根据表单数据动态构建 SQL 查询,并且只添加那些非空的、有值的条件。
以下是一个示例,假设你有一个模型 Item
:
from sqlmodel import SQLModel, Field, Session
class Item(SQLModel, table=True):
id: int = Field(primary_key=True)
name: str
description: str = None
然后,你的表单数据可能是一个字典,其中包含用户提交的查询条件:
form_data = {
"name": "example",
"description": None # 或者 "some_description"
}
接下来,你可以使用 SQLModel 构建查询:
from sqlmodel import select
def dynamic_query(session, form_data):
query = select(Item)
# 添加非空的等值条件
for field, value in form_data.items():
if value is not None:
query = query.where(getattr(Item, field) == value)
# 如果需要模糊查询,你可以修改为以下方式:
# for field, value in form_data.items():
# if value is not None:
# query = query.where(getattr(Item, field).like(f"%{value}%"))
return session.exec(query).all()
通过上述函数,你可以根据表单数据动态构建 SQL 查询。这样,只有那些有值的条件会被添加到查询中,而空值条件则会被忽略。在这个例子中,等值条件用于非空字段,如果需要模糊查询,可以使用 like
或 ilike
方法。
使用示例:
with Session(engine) as session:
results = dynamic_query(session, form_data)
print(results)
这将返回符合表单数据条件的项目列表。请确保在实际应用中适当处理和验证用户输入以防止 SQL 注入等安全问题。