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})
```
我的笔记