“有时”使用 Peewee ORM 在 PostgreSQL 上遇到 InterfaceError

kra*_*r65 6 python postgresql orm interface peewee

我正在使用 Python Flask 框架和带有 PostgreSQL 9.3的Peewee ORM构建一个网站。到目前为止,一切进展顺利,但我现在遇到了一些麻烦。我有时会得到一个InterfaceError: connection already closed. 我得到它的代码如下:

pendingOrders_q = CustomerOrder\
    .select()\
    .where(CustomerOrder.status == CustomerOrder.STATUS_PENDING)\
    .where(CustomerOrder.expiration < datetime.utcnow())

if len(list(pendingOrders_q)) > 0:
    # do some stuff here..
Run Code Online (Sandbox Code Playgroud)

我知道我计算结果数量的方法非常讨厌,但我不知道其他任何方法。此外,这通常有效,但有时会出现以下错误。我不明白为什么它通常可以正常工作,但有时会出现此错误。有人知道这里发生了什么吗?

  File "/home/kramer65/xs/app/order_management.py", line 210, in checkExpiration
    if len(list(pendingOrders_q)) > 0:
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1988, in __iter__
    return iter(self.execute())
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1981, in execute
    self._qr = ResultWrapper(model_class, self._execute(), query_meta)
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1698, in _execute
    return self.database.execute_sql(sql, params, self.require_commit)
  File "/usr/local/lib/python2.7/dist-packages/playhouse/postgres_ext.py", line 251, in execute_sql
    self.commit()
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 2104, in __exit__
    reraise(new_type, new_type(*exc_value.args), traceback)
  File "/usr/local/lib/python2.7/dist-packages/playhouse/postgres_ext.py", line 242, in execute_sql
    cursor = self.get_cursor()
  File "/usr/local/lib/python2.7/dist-packages/playhouse/postgres_ext.py", line 229, in get_cursor
    return self.get_conn().cursor(name=name)
InterfaceError: connection already closed
Run Code Online (Sandbox Code Playgroud)

[编辑] 我现在突然也收到该行的以下错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/apscheduler/scheduler.py", line 512, in _run_job
    retval = job.func(*job.args, **job.kwargs)
  File "/home/kramer65/xs/app/order_management.py", line 207, in checkForDetails
    for order in paidInOrders_q:
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1411, in next
    obj = self.iterate()
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1392, in iterate
    row = self.cursor.fetchone()
InterfaceError: cursor already closed
Run Code Online (Sandbox Code Playgroud)