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})