我正在从与 SQLAlchemy 连接的数据库中删除一行,但收到以下错误:
File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
2020-06-12T20:37:21.822757+00:00 app[web.1]: raise exception
2020-06-12T20:37:21.822873+00:00 app[web.1]: sqlalchemy.orm.exc.UnmappedInstanceError: Class 'builtins.NoneType' is not mapped
奇怪的是,我已经能够对另一个表使用完全相同的问题,并且效果很好。
Here是我的 Python 代码:
@app.route('/deleteleads/<solicitudes_id>/', methods=['GET', 'POST'])
def deleteleads(solicitudes_id):
my_data = Data.query.get(solicitudes_id)
db.session.delete(my_data)
db.session.commit()
flash("¡Lead eliminado satisfactoriamente!")
return redirect(url_for('show_leads'))
这是我的模型:
class Leads(db.Model):
__tablename__ = 'solicitudes'
solicitudes_id = db.Column(db.BIGINT, primary_key=True)
tipouso = db.Column(db.VARCHAR(255))
tipoauto = db.Column(db.VARCHAR(255))
credito = db.Column(db.BOOLEAN)
entidadcrediticia = db.Column(db.VARCHAR(255))
id_auto = db.Column(db.VARCHAR(255), db.ForeignKey('autos.id_auto'))
id_user = db.Column(db.BIGINT, db.ForeignKey('usuarios.id_user'))
fecha = db.Column(db.DATE)
canalinput = db.Column(db.VARCHAR(255))
ciudadcompra = db.Column(db.VARCHAR(255))
hora = db.Column(db.TIME(255))
def __init__(self, solicitudes_id, tipouso, tipoauto, credito, entidadcrediticia, id_auto, id_user, fecha, canalinput, ciudadcompra, hora):
self.solicitudes_id = solicitudes_id
self.tipouso = tipouso
self.tipoauto = tipoauto
self.credito = credito
self.entidadcrediticia = entidadcrediticia
self.id_auto = id_auto
self.id_user = id_user
self.fecha = fecha
self.canalinput = canalinput
self.ciudadcompra = ciudadcompra
self.hora = hora
根据错误消息和代码,问题似乎出在以下行:
my_data = Data.query.get(solicitudes_id)
错误信息指出
'builtins.NoneType'
类未映射,这意味着
Data.query.get(solicitudes_id)
返回的是
None
。这可能是由于数据库中不存在与提供的
solicitudes_id
匹配的记录。
正在尝试从
Data
模型中删除数据,但的模型名为
Leads
。为了解决这个问题,应该将
Data
替换为
Leads
:
my_data = Leads.query.get(solicitudes_id)
以下是更新后的
deleteleads
函数代码:
@app.route('/deleteleads/<int:solicitudes_id>/', methods=['GET', 'POST'])
def deleteleads(solicitudes_id):
my_data = Leads.query.get(solicitudes_id)
if my_data is None:
flash("No se encontró el lead con el ID especificado.")
else:
db.session.delete(my_data)
db.session.commit()
flash("¡Lead eliminado satisfactoriamente!")
return redirect(url_for('show_leads'))
这段代码首先检查
my_data
是否为
None
。如果是,则显示一条消息,指示未找到该 lead。否则,它将删除该 lead 并显示一条成功消息。
此外,应该在路由中使用
<int:solicitudes_id>
而不是
<solicitudes_id>
来确保
solicitudes_id
被解释为整数。