簡體   English   中英

ZODB:TypeError試圖將對象添加到OOBTree

[英]ZODB: TypeError trying to add object to OOBTree

我正在開發Flask webapp。 我正在使用帶有Flask-ZODB擴展名的ZODB。

創建我的數據庫,如下所示:

from ZODB.DB import DB
from ZODB.FileStorage import FileStorage
from flask.ext.zodb import BTree
import transaction

# crea los indices de los principales objetos
storage = FileStorage('myproject/database/db.fs')
conn = DB(storage)
db = conn.open().root()
for idx in ['usuarios', 'proyectos', 'informes', 'actividades', 'objetivos', 'usuarios']:
        if not idx in db.keys():
            db[idx] = BTree()

transaction.commit();
conn.close();

我的模特:

from flask import current_app as app
from flask.ext.zodb import Object, List, Dict


class Proyecto(Object):
    """
       Representacion de un proyecto con su informacion general
       y todos los informes cargados para el mismo, ordenados por numero de informe
    """
    def __init__(self, nombre, lineaTrabajo, presupuesto, organizacion=None,
                 localizacion=None, inicio=None, 
                 responsable=None):
        self.nombre       = nombre
        self.organizacion = organizacion
        self.localizacion = localizacion
        self.inicio       = inicio
        self.responsable  = responsable
        self.lineaTrabajo = lineaTrabajo
        self.presupuesto  = presupuesto
        self.informes     = Dict()

即時通訊在嘗試向數據庫添加對象時遇到問題:

def agregarProyecto(self, proyecto):
        if not proyecto.nombre in list(self.db['proyectos'].keys()):
            self.db['proyectos'][proyecto.nombre] = proyecto

我收到此錯誤:

Traceback:
  File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "S:\Fuentes\workspace\Python\flaskapps\myproject-app\myproject\views.py", line 24, in cargarProyecto
    coleccion.agregarProyecto(form.crearProyecto())
  File "S:\Fuentes\workspace\Python\flaskapps\myproject-app\myproject\basedatos.py", line 27, in agregarProyecto
    self.db['proyectos'][proyecto.nombre] = proyecto
TypeError: Object has default comparison

我正在按照教程顯示的那樣做。 我做了一個簡單的測試,而不是存儲一個對象,而是存儲了一個字符串,並且效果很好。 有任何想法嗎?

您的密鑰為“ None或類似的值; 沒有自身順序的對象。

確保proyecto.nombre是可proyecto.nombre的類型(例如整數或字符串)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM