0

我使用带有 postgres 关系数据库的金字塔 SQLalchemy 开发了应用程序。我想检查行是否在表中。所以我尝试了以下步骤

def nextPage(request):
  query = request.dbsession.query(NewEntry)
  msheet_no = request.params['msheet_no']
  obj1=NewEntry()
  getRoll=query.filter(NewEntry.batch==batch).order_by(-NewEntry.roll_no).first() 
  rollno=getRoll.roll_no+1
  obj1.roll_no = rollno
  if(obj1.msheet_no==msheet_no):
     print("Marksheet No is already existed",obj1.msheet_no,'-',msheet_no)
  else:
     request.dbsession.add(obj1)

在此代码中,重复项msheet_no被插入到表中。如何避免重复msheet_no被插入到表中?

注意:msheet_noandrollno是表中的主键

4

1 回答 1

1

if(obj1.msheet_no==msheet_no):在这段代码中,您正在检查新创建对象的 msheet_no 的字段值,该字段值始终为 None,因此在逻辑上没有意义。这里有两个建议:

  1. 要么从数据库中获取所有存在的值,msheet_no然后仅在它不存在时才插入。
  2. 使用交集查询except_返回那些尚未插入的值。

我认为在您的场景中,您必须使用第一种查找方式。唯一的缺点是每次您打算插入新对象时都需要查询。

于 2018-05-11T17:31:35.137 回答