关于这个主题还有很多其他答案,但没有一个有帮助。
我只是想向我的数据库添加一个项目。
数据库设置
class Client(db.Model, CommonFields):
__tablename__ = "client"
__table_args__ = {"schema": "metadata"}
name = db.Column(db.String)
client_id = db.Column(db.BigInteger, db.ForeignKey("metadata.clientid"))
roles = db.relationship("Role", secondary=client_roles)
服务
def addClient(
name: str,
client: int,
roles: typing.List[Role],
):
client = Client(
name=name,
client=client,
roles=roles
).insert()
return client
#插入失败
def insert(self):
with db_session_manager(
message_if_fails=f"Failed adding"
):
db.session.add(self)
如何修复“str”对象没有属性“_sa_instance_state”?
这是完整的错误
File "/sqlalchemy/orm/mapper.py", line 3098, in cascade_iterator
queue = deque(
File "/sqlalchemy/orm/relationships.py", line 1938, in cascade_iterator
tuples = state.manager[self.key].impl.get_all_pending(state, dict_)
File "/sqlalchemy/orm/attributes.py", line 1153, in get_all_pending
current_states = [
File "/sqlalchemy/orm/attributes.py", line 1154, in <listcomp>
((c is not None) and instance_state(c) or None, c)
AttributeError: 'str' object has no attribute '_sa_instance_state'
我发现一些可能会妨碍您的潜在问题:
在
addClient()
中,您接受 client 的值,然后将其作为 Client()
传递给 client=client,
,当您可能指的是 client_id=client,
时,因为 Client 类具有 client_id
而不是 client
。
AttributeError
异常表明您的
roles
参数获取了一个或多个字符串而不是 Role
类型对象,该对象将具有 _sa_instance_state
属性,它(正确地)抱怨类型 上缺失str
。要纠正此问题,您可能需要获取角色字符串并查找(或创建)相应的角色记录,然后传递这些 ORM 对象。