SQLAlchemy报错:sessionmaker对象无add属性,PostgreSQL插入失败
解决SQLAlchemy "sessionmaker object has no attribute add" 错误
这个错误的核心原因是:传入create_new_user函数的db参数不是实例化的Session对象,而是sessionmaker工厂类本身。sessionmaker是用来生成Session实例的工具类,只有实例化后的Session才具备add、commit等数据操作方法。
具体解决步骤
确保传入的是Session实例
初始化Session的正确流程如下:from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # 初始化PostgreSQL连接引擎 engine = create_engine("postgresql://你的用户名:密码@主机地址/数据库名") # 创建Session工厂类 SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # 实例化一个Session对象 db_session = SessionLocal()调用
create_new_user时,传入的是db_session,而非SessionLocal:new_user = create_new_user(user_create_data, db_session)框架依赖注入场景修正(以FastAPI为例)
如果是在FastAPI等框架中使用依赖注入,要确保依赖函数返回的是Session实例:def get_db(): db = SessionLocal() try: yield db finally: db.close()路由中通过
Depends(get_db)获取Session实例,再传入函数:@app.post("/users/") def create_user(user: UserCreate, db: Session = Depends(get_db)): return create_new_user(user, db)开启类型检查提前规避
你的函数已经标注了db: Session,开启类型检查工具(如mypy)可以在编译阶段发现参数类型不匹配的问题,避免运行时报错。
内容的提问来源于stack exchange,提问作者Nidal H
相关产品推荐
相关产品推荐

