+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

SQLAlchemy报错:ArgumentError("subject table for an INSERT, UPDATE or DELETE expected, got Column('id', Integer(), table=<user>, primary_key=True, nullable=False)."

Python开发中,如果使用 SQLAlchemy 操作数据库来更新数据,当 query 使用的是主键而不是对象时会报错: ``` ArgumentError("subject table for an INSERT, UPDATE or DELETE expected, got Column('id', Integer(), table=<user>, primary_key=True, nullable=False)." ``` 数据库表名: user 数据库表对应的对象(对象是通过 __tablename__ 属性做了和数据库表的映射) ``` class UserInfo(BaseModel): __tablename__ = "user" # ID,主键 id = Column(Integer, primary_key=True, nullable=False) name = Column(String, nullable=False) ... ``` (报错时)更新数据的代码,注意query部分是 UserInfo.id ``` with session_commit_maker() as db_session: result = db_session.query(UserInfo.id)\ .filter(UserInfo.id == uid)\ .update({"name": new_name}) ``` 将 query 条件由 UserInfo.id 改为 UserInfo 即可解决该问: ``` with session_commit_maker() as db_session: result = db_session.query(UserInfo)\ .filter(UserInfo.id == uid)\ .update({"name": new_name}) ```
我的笔记