gpt4 book ai didi

python - sqlalchemy.orm.exc.UnmappedInstanceError : Class 'builtins.NoneType' is not mapped

转载 作者:行者123 更新时间:2023-12-04 01:42:38 27 4
gpt4 key购买 nike

我有 3 个 sqlalchemy 模型设置,它们都是一对多的关系。用户模型包含许多任务模型,任务模型包含许多子任务模型。当我执行 test_script.py 我得到错误 sqlalchemy.orm.exc.UnmappedInstanceError: Class 'builtins.NoneType' is not mapped .

我已经阅读并尝试了每个模块上的几种不同关系。我的目标是能够在 User 和 Task 模型中包含正确的 child 列表。我最终想访问列表项,例如 user_x.task[3].subtask[1]
这是代码,
(模型、脚本、错误)

楷模

class User(Base):
""" User Model for storing user related details """
__tablename__ = 'Users'

id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
username = Column(String(255), nullable=False)
password_hash = Column(String(128), nullable=False)
email = Column(String(255), nullable=False, unique=True)
created_date = Column(DateTime, default=datetime.utcnow)

tasks = relationship(Task, backref=backref("Users", uselist=False))

def __init__(self, username: str, password_hash: str, email: str):
self.username = username
self.password_hash = password_hash
self.email = email



class Task(Base):
""" Task Model for storing task related details """
__tablename__ = 'Tasks'

id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
title = Column(String(255), nullable=False)
folder_name = Column(String(255), nullable=True)
due_date = Column(DateTime, nullable=True)
starred = Column(Boolean, default=False)
completed = Column(Boolean, default=False)
note = Column(String, nullable=True)
created_date = Column(DateTime, default=datetime.utcnow)
user_id = Column(Integer, ForeignKey('Users.id'))

subtasks = relationship(Subtask, backref=backref("Tasks", uselist=False))

def __init__(self, title: str, **kwargs):
self.title = title
self.folder_name = kwargs.get('folder_name', None)
self.due_date = kwargs.get('due_date', None)
self.starred = kwargs.get('starred', False)
self.completed = kwargs.get('completed', False)
self.note = kwargs.get('note', None)



class Subtask(Base):
""" Subtask Model for storing subtask related details """
__tablename__ = 'Subtasks'

id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
title = Column(String(255), nullable=False)
completed = Column(Boolean, default=False)
task_id = Column(Integer, ForeignKey('Tasks.id'))

def __init__(self, title: str, **kwargs):
self.title = title
self.completed = kwargs.get('completed', False)

test_script.py
session1 = create_session()

user1 = User(
username="Stephen",
password_hash="p-hash",
email="stephen@gmail.com"
).tasks.append(
Task(
title='Delete Me',
folder_name='Folder 1'
).subtasks.append(
Subtask(
title='Delete Me 2'
)
)
)

session1.add(user1)

session1.commit()
session1.close()

错误信息
/Users/StephenCollins/Respositories/pycharm_workspace/Personal/BusyAPI_v1/venv/bin/python /Users/StephenCollins/Respositories/pycharm_workspace/Personal/BusyAPI_v1/tests/test_script.py
Traceback (most recent call last):
File "/Users/StephenCollins/Respositories/pycharm_workspace/Personal/BusyAPI_v1/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1943, in add
state = attributes.instance_state(instance)
AttributeError: 'NoneType' object has no attribute '_sa_instance_state'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/StephenCollins/Respositories/pycharm_workspace/Personal/BusyAPI_v1/tests/test_script.py", line 24, in <module>
session1.add(user1)
File "/Users/StephenCollins/Respositories/pycharm_workspace/Personal/BusyAPI_v1/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1945, in add
raise exc.UnmappedInstanceError(instance)
sqlalchemy.orm.exc.UnmappedInstanceError: Class 'builtins.NoneType' is not mapped

希望我很接近,但如果我完全走错了方向,请告诉我。我在之前的实习中使用了一点 Hibernate,但我在 python、sqlalchemy 和 mysql 方面是自学的(最好的一种)。

最佳答案

在 Python 中,就地改变对象的方法通常返回 None .您的作业的表达式链创建模型对象、访问关系属性并附加到所述属性,这将返回 None .拆分操作:

user1 = User(
username="Stephen",
password_hash="p-hash",
email="stephen@gmail.com"
)

task1 = Task(
title='Delete Me',
folder_name='Folder 1'
)

task1.subtasks.append(
Subtask(
title='Delete Me 2'
)
)

user1.tasks.append(task1)

关于python - sqlalchemy.orm.exc.UnmappedInstanceError : Class 'builtins.NoneType' is not mapped,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56720684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com