首页 > 解决方案 > “NoneType”对象不可迭代到 SQLAlchemy session.commit()

问题描述

我想在我的 postgres 数据库中添加视线,但是在提交时会抛出这样的错误:

错误日志

我调用 add 和 commit 的类(self.session.add(sight) 工作正常):

class SightsRepository:
def __init__(self, role):
    self.role = role
    session_manager = SessionManager()
    session_manager.setRole(role)
    self.session = session_manager.getSession()

def __del__(self):
    self.session.close()

def findSightByName(self, name):
    return self.session.query(Sights).filter(Sights.name == name).first()

def findSightById(self, id):
    return self.session.query(Sights).filter(Sights.id == id).first()

def findAllSights(self):
    return self.session.query(Sights).all()

def addSight(self, sight):
    print(self.session)
    self.session.add(sight)
    self.session.commit()

我的会话管理器,我从中获取会话:

class SessionManager():

admin_engine = create_engine("postgresql+psycopg2://postgres:1@localhost/Excursions")
unlogged_engine = create_engine("postgresql+psycopg2://unlogged_user:unlogged_user@localhost/Excursions")
logged_engine = create_engine("postgresql+psycopg2://logged_user:logged_user@localhost/Excursions")
guide_engine = create_engine("postgresql+psycopg2://guide:guide@localhost/Excursions")

def __init__(self, role=0):
    self.role = role
    self.sessionmaker = sessionmaker(bind=self.unlogged_engine)
    self.session = self.sessionmaker()

def setRole(self, role):
    if 0 <= role <= 3:
        self.role = role
    else:
        raise Exception("Wrong role")

def getSession(self):
    if self.role == 0:
        self.sessionmaker = sessionmaker(bind=self.unlogged_engine)
        self.session = self.sessionmaker()
        return self.session
    elif self.role == 1:
        self.sessionmaker = sessionmaker(bind=self.logged_engine)
        self.session = self.sessionmaker()
        return self.session
    elif self.role == 2:
        self.sessionmaker = sessionmaker(bind=self.guide_engine)
        self.session = self.sessionmaker()
        return self.session
    elif self.role == 3:
        self.sessionmaker = sessionmaker(bind=self.admin_engine)
        self.session = self.sessionmaker()
        return self.session
    else:
        raise Exception("Wrong role")

一切都是通过 postgres 连接完成的。尝试添加到另一个模型也可以正常工作,没有任何错误(下面的工作代码):

class GuidesRepository:
def __init__(self, role):
    self.role = role
    session_manager = SessionManager()
    session_manager.setRole(role)
    self.session = session_manager.getSession()

def __del__(self):
    self.session.close()

def findGuideByFIO(self, name, surname, patronymic):
    return self.session.query(Guides).filter(Guides.first_name == name).filter(Guides.last_name == surname)\
        .filter(Guides.patronymic == patronymic).first()

def addGuide(self, guide):
    self.session.add(guide)
    self.session.commit()

def findGuideById(self, id):
    return self.session.query(Guides).filter(Guides.id == id).first()

def getAllGuides(self):
    return self.session.query(Guides).all()

标签: pythonsqlalchemyorm

解决方案


我刚刚删除了数据库并再次初始化,一切都开始工作了。


推荐阅读