#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'