【发布时间】:2021-08-20 15:46:15
【问题描述】:
我想在我的 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()
【问题讨论】:
标签: python sqlalchemy orm