Peewee Model, dicts() – Modelo de Peewee, dicts()
Estoy depurando código existente. Estoy tratando de averiguar la intención del acceso obviamente incorrecto a .dicts
de un modelo peewee en la declaración de advertencia en MyDbBackend.store
y cómo podría corregir eso.
Supongo que el mensaje de advertencia debería agregar una salida más detallada al modelo que no se pudo guardar. Sin embargo, el atributo .dicts
existe solo en la clase orm.BaseQuery
.
El mensaje de salida no es muy útil actualmente. Quiero proporcionar un mensaje de advertencia mejorado dado que i.save
no funciona. Con “mejorado” quiero decir que proporcionará alguna información adicional sobre el registro que no se pudo guardar.
Entonces, ¿cómo puedo obtener BaseQuery
desde el modelo
y qué produciría .dicts
entonces? ¿Sería útil esa información en el contexto del mensaje de advertencia?
import peewee as orm
base_datos = orm.Proxy()
class ModeloBase(orm.Model):
class Meta:
database = base_datos
class MiModelo(ModeloBase):
campo_fecha_hora = orm.DateTimeField(null=True)
campo_entero = orm.IntegerField(null=True)
campo_float = orm.FloatField(null=True)
class MyDbBackend:
def __init__(self, base_datos):
self.bd = base_datos
self.registros = [] # Holds objects derived from ModelBase.
[...]
def almacenar(self):
with self.bd.atomic():
for i in self.registros:
try:
i.save()
except Exception as e:
logger.warning("no se pudo guardar el registro: {}".format(i.dicts()))
raise e
self.limpiar()
->
logger.warning(“no se pudo guardar el registro: {}”.format(i.dicts()))
AttributeError: el objeto ‘MiModelo’ no tiene un atributo ‘dicts’
davy.ai
El código está tratando de acceder al atributo
.dicts
de un objetoModel
(i
) para mostrar información sobre el registro que no se guardó. Sin embargo, el atributo.dicts
pertenece a la claseBaseQuery
, no a la claseModel
. Por lo tanto, acceder ai.dicts()
provoca que se genere unAttributeError
.Para obtener el objeto
BaseQuery
del objetoModel
, se puede llamar al métodoselect()
en la claseModel
. Este método devuelve un objetoBaseQuery
que se puede usar para ejecutar consultas contra la base de datos.En el contexto del mensaje de advertencia, el atributo
.dicts
puede no ser muy útil, ya que solo proporciona un iterador sobre los diccionarios que representan las instancias del modelo en la consulta. En su lugar, se podrían mostrar algunos de los campos del registro que no se guardó, como los valores de los atributosdtfield
,intfield
yfloatfield
. Por ejemplo:Esto proporcionaría información más específica sobre el registro que no se guardó, lo que facilitaría la identificación de la causa del error.