FLASK SQLAlchemy:AttributeError:“str”对象没有属性“_sa_instance_state”

问题描述 投票:0回答:1

关于这个主题还有很多其他答案,但没有一个有帮助。

我只是想向我的数据库添加一个项目。

数据库设置

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'
python sql flask sqlalchemy flask-sqlalchemy
1个回答
0
投票

我发现一些可能会妨碍您的潜在问题:

  1. addClient()
    中,您接受 client 的值,然后将其作为
    Client()
    传递给
    client=client,
    ,当您可能指的是
    client_id=client,
    时,因为 Client 类具有
    client_id
    而不是
    client

  2. 我认为您的
  3. AttributeError

    异常表明您的

    roles
    参数获取了一个或多个字符串而不是
    Role
    类型对象,该对象将具有
    _sa_instance_state
    属性,它(正确地)抱怨类型
     上缺失str
    。要纠正此问题,您可能需要获取角色字符串并查找(或创建)相应的角色记录,然后传递这些 ORM 对象。
    
    

© www.soinside.com 2019 - 2024. All rights reserved.