python项目中,如果使用的 SQLAlchemy 操作数据库,当表名和对应的项目中的对象名不一样时,更新数据时会报错

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

数据库表名

user

数据库表对应的对象

class UserInfo(BaseModel):
    __tablename__ = "user"
    # ID
    id = Column(Integer, primary_key=True, nullable=False)
    ...

对象是通过 __tablename__ 属性做了和数据库表的映射

---

更新数据的代码(报错时),注意粗体标红部分

    with session_commit_maker() as db_session:
        result = db_session.query(UserInfo.id)\
            .filter(UserInfo.id == uid)\
            .update({"name": new_name})

将以上粗体标红部分改为 UserInfo 即可解决该问

    with session_commit_maker() as db_session:
        result = db_session.query(UserInfo)\
            .filter(UserInfo.id == uid)\
            .update({"name": new_name})

 

相关文章:

  • 2022-02-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-02
  • 2021-08-04
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-07
  • 2021-07-11
  • 2021-09-22
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案