屏蔽ip网站吗,上海手机网站开发价格,园林景观 网站建设,哪里卖网站域名虽然之前添加唯一性校验的方法能够解决数据唯一的问题#xff0c;但是如果忘了处理异常#xff0c;则可能会导致程序崩溃。
在此基础上#xff0c;我们可以在插入数据之前检查该数据是否已存在。
原来的代码#xff1a;
from sqlmodel import Field, Session, SQLModel,…虽然之前添加唯一性校验的方法能够解决数据唯一的问题但是如果忘了处理异常则可能会导致程序崩溃。
在此基础上我们可以在插入数据之前检查该数据是否已存在。
原来的代码
from sqlmodel import Field, Session, SQLModel, create_engine# 声明模型
class User(SQLModel, tableTrue):id: int | None Field(defaultNone, primary_keyTrue)# 不能为空必须唯一name: str Field(nullableFalse, uniqueTrue)age: int | None None# 创建引擎
engine create_engine(sqlite:///database.db, echoTrue)# 创建表
SQLModel.metadata.create_all(engine)# 创建两个名字重复的用户
zs_1 User(name张三, age22)
zs_2 User(name张三, age23)with Session(engine) as session:session.add(zs_1)session.add(zs_2)session.commit()
我们改写如下
from sqlalchemy import select
from sqlmodel import Field, Session, SQLModel, create_engine# 声明模型
class User(SQLModel, tableTrue):id: int | None Field(defaultNone, primary_keyTrue)# 不能为空必须唯一name: str Field(nullableFalse, uniqueTrue)age: int | None None# 创建引擎
engine create_engine(sqlite:///database.db, echoTrue)# 初始化表
SQLModel.metadata.drop_all(engine)
SQLModel.metadata.create_all(engine)# 添加用户的方法
def add_user(name: str, age: int):user User(namename, ageage)with Session(engine) as session:# 检查是否已存在statement select(User).where(User.name name)results session.exec(statement)db_user results.first()print(查询结果, db_user)if db_user is not None:print(f用户 {name} 已存在)return# 执行添加session.add(user)session.commit()# 创建两个名字重复的用户
add_user(张三, 23)
add_user(张三, 24)# 查询所有用户
with Session(engine) as session:statement select(User)results session.exec(statement).all()print(results)
执行结果如下
第一次的时候查询出来的是个None第二个则提示已存在。
用这种方案能够更安全的解决数据唯一性的问题。
当然在模型中声明唯一性约束也是必要的可以方案用户跳过接口直接以操作数据库的方式对表进行重复数据写入。