объект ‘float’ не имеет атрибута’ _sa_instance_state ‘ для базы данных.Числовая колба-SQLAlchemy

#python #floating-point #flask-sqlalchemy #precision

Вопрос:

У меня есть эта проблема, которая не заставляет меня вставлять данные в таблицу, данные поступают из сеанса колбы и хранятся следующим образом:

 {indice:{'id_articulos':id, 'id_empresas': articulo.id_empresas, 
                    'descripcion': articulo.descripcion, 'pz': pz, 'cantidad': cantidad, 'id_unidad': articulo.id_unidad, 'unidad': articulo.unidad, 
                    'notas' : notas, 'precios': precios_str, 'id_moneda': articulo.id_moneda, 'moneda': articulo.moneda, 'referencia': referencia }}
 

У меня есть эта модель:

 class Salidas(db.Model):
__tablename__ = "salidas"
id_salidas = db.Column(db.Integer, primary_key=True)
pz = db.Column(db.Numeric(10,0))
notas = db.Column(db.Text)
unidad = db.Column(db.Numeric(10,2))
precio = db.Column(db.Numeric(10,2))
referencia = db.Column(db.String(20))

id_articulos = db.Column(db.Integer, db.ForeignKey('articulo.id_articulo'), nullable=False)
unidad = db.relationship('Articulo', backref=db.backref('salidas_articulos', lazy=True))

id_unidad = db.Column(db.Integer, db.ForeignKey('unidad.id_unidad'), nullable=False)
unidad = db.relationship('Unidad', backref=db.backref('unidad_salida', lazy=True))

id_control = db.Column(db.Integer, db.ForeignKey('control.id_control'), nullable=False)
unidad = db.relationship('Control', backref=db.backref('salidas_control', lazy=True))

id_moneda = db.Column(db.Integer, db.ForeignKey('moneda.id_moneda'), nullable=False)
unidad = db.relationship('Moneda', backref=db.backref('salidas_moneda', lazy=True))
 

и из этой модели я пытаюсь вставить данные следующим образом:

 for key, item in session['Salidas'].items():
        pz = float(item['pz'])
        notasarticulo = item['notas']
        unidad = float(item['cantidad'])
        id_unidad = int(item['id_unidad'])
        precio = float(item['precios'])
        id_articulos = int(item['id_articulos'])
        referencia = item['referencia']
        id_moneda = int(item['id_moneda'])
        salidas = Salidas(pz = pz, notas = notasarticulo, unidad = unidad, 
                                precio = precio, referencia = referencia, 
                                id_articulos = id_articulos, id_unidad = id_unidad, 
                                id_control = id_control, id_moneda = id_moneda)
        db.session.add(salidas)
        db.session.commit()
 

и это продолжает давать мне эту ошибку

В начале я не преобразовывал переменные в «плавающие», и это создавало мне проблемы, поскольку

объект ‘str’ не имеет атрибута ‘_sa_instance_state’

тогда у меня возникает проблема с плаванием, это обратная связь:

 AttributeError
 

Ошибка атрибута: объект ‘float’ не имеет атрибута ‘_sa_instance_state’
Обратная связь (последний последний звонок)

 File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagesflaskapp.py", line 2088, in __call__

return self.wsgi_app(environ, start_response)

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagesflaskapp.py", line 2073, in wsgi_app

response = self.handle_exception(e)

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagesflaskapp.py", line 2070, in wsgi_app

response = self.full_dispatch_request()

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagesflaskapp.py", line 1515, in full_dispatch_request

rv = self.handle_user_exception(e)

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagesflaskapp.py", line 1513, in full_dispatch_request

rv = self.dispatch_request()

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagesflaskapp.py", line 1499, in dispatch_request

return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagesflask_loginutils.py", line 272, in decorated_view

return func(*args, **kwargs)

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicroteneriasalidasroutes.py", line 187, in generar_salidas

salidas = Salidas(pz = pz, notas = notasarticulo, unidad = unidad,

File "<string>", line 4, in __init__

 

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyormstate.py", line 480, in _initialize_instance

manager.dispatch.init_failure(self, args, kwargs)

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyutillanghelpers.py", line 70, in __exit__

compat.raise_(

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyutilcompat.py", line 207, in raise_

raise exception

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyormstate.py", line 477, in _initialize_instance

return manager.original_init(*mixed[1:], **kwargs)

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyormdecl_base.py", line 1145, in _declarative_constructor

setattr(self, k, kwargs[k])

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyormattributes.py", line 459, in __set__

self.impl.set(

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyormattributes.py", line 1253, in set

value = self.fire_replace_event(state, dict_, value, old, initiator)

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyormattributes.py", line 1279, in fire_replace_event

value = fn(

File "C:UserstenerOneDriveDocumentsWorkBenchteneriaMicrovenvLibsite-packagessqlalchemyormattributes.py", line 1714, in emit_backref_from_scalar_set_event

instance_state(child),

AttributeError: 'float' object has no attribute '_sa_instance_state'
 

EDIT:
I tried converting to Decimal using decimal module

and gives this error

 AttributeError: 'decimal.Decimal' object has no attribute '_sa_instance_state'