python - “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()
解决方案
我刚刚删除了数据库并再次初始化,一切都开始工作了。
推荐阅读
- elasticsearch - EsSparkSQL$.saveToES 方法中发生 NoSuchMethodError
- swift - 从 '(_, _) throws -> ()' 类型的抛出函数到非抛出函数类型 '(Bool, Error?) -> Void 的无效转换
- mysql - 如何在 nodejs postgres/mysql 中查看已连接服务器的所有数据库
- python - 如何使用 flask-migrate 迁移具有不同表的多数据库
- payment-gateway - Google Pay 付款数据不包含交易金额
- javascript - 在 NaN 中添加数字结果
- php - 将数组插入数组集合而不循环
- r - 查看内部/未导出函数的文档?
- sql - 如何使用另一个表 B 中的值更新表 A 中的列,其中表 A 和 B 之间的关系是 1:N,使用 max() 函数
- python-3.x - 如何根据熊猫的年份差异复制行