【问题标题】:'NoneType' object is not iterable to SQLAlchemy session.commit()“NoneType”对象不可迭代到 SQLAlchemy session.commit()
【发布时间】:2021-08-20 15:46:15
【问题描述】:

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

error log

我调用 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()

【问题讨论】:

    标签: python sqlalchemy orm


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-08
      • 2020-05-06
      • 1970-01-01
      • 2013-12-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多