首页 > 编程问答 >使用 SQLAlchemy 删除注册时出现错误

使用 SQLAlchemy 删除注册时出现错误

时间:2024-08-03 16:42:16浏览次数:10  
标签:python postgresql flask sqlalchemy flask-sqlalchemy

我正在从与 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 被解释为整数。

标签:python,postgresql,flask,sqlalchemy,flask-sqlalchemy
From: 62352306

相关文章

  • Python学习中最常见的10个列表操作问题
    列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助。1、迭代列表时如何访问列表下标索引普通版:items=[8,23,45]forindexinrange(len(items)):print(index,"-->",items[index])​......
  • Python中定义(创建)、调用函数及返回值
    1.定义(创建)函数要调用一个函数,首先要定义它。在Python中使用关键字def来定义一个函数。函数通常由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义的一般格式如下:def函数名(参数列表):函数体例如:defsayhello(): print('hello')最简单的函数:defm......
  • python用List的内建函数list.sort进行排序
    对List进行排序,Python提供了两个方法方法1用List的内建函数listsort进行排序listsort(func=None,key=None,reverse=False)Python实对List进行排序,Python提供了两个方法方法1.用List的内建函数list.sort进行排序list.sort(func=None,key=None,reverse=False)>>>list=......
  • 发出将任务从 Flask 应用程序传递到 Celery Worker - Flask 应用程序/蓝图/Docker
    我有一个带有各种端点的Flask应用程序,并且想要向celery工作任务队列添加一个端点。由于循环进口,建造芹菜工人容器一直是一项挑战。我尝试了几种让celery工作人员识别任务的方法,如下所示,但似乎Flask应用程序上下文在初始化时并未传递给celery工作。使用dockercompose......
  • 禁用 GIL 的 Python 3.13 非常慢
    我对python3.12.0与使用3.13.0b3标志编译的python--disable-gil进行了简单的性能测试。该程序使用ThreadPoolExecutor或ProcessPoolExecutor执行斐波那契数列的计算。引入禁用GIL的PEP文档表示,存在一些开销,主要是由于有偏差......
  • 有没有办法阻止 setUp() 为 python 测试用例中的每个测试方法启动浏览器?
    我正在练习编写Web自动化测试用例,并且编写了一些函数来测试登录、在用户主页中查找我的用户名以及测试GitHub的注销功能。然而,我通过经验和阅读了解到setUp()是在每个测试方法之前启动的,而我的问题是在每个测试方法之前它都会打开一个新的浏览器。我希望我的所有测......
  • 尝试使用Python抓取需要先登录的网站但没有成功
    我正在尝试抓取一个需要登录的网站(我的路由器GUI),但无论我做了什么,我都会反复返回登录站点的源代码,而不是成功登录后出现的页面。我做了一些阅读,并意识到我需要返回POST请求的答案。我想我找到了它们并返回了所需的值,但仍然-似乎没有任何效果。我使用https://curl.tri......
  • 给python初学者的一些建议
    写在开篇关于Python,可以这么说,这几年借着数据科学、机器学习与人工智能的东风,Python老树开新花,在风口浪尖上居高不下。Python之所以这么受大家的青睐,是因为它语言简洁,上手容易,让非计算机专业的人员也能快速上手,享受编程开发带来的便利和福利。但Python再简单,它也是一......
  • Python中15个递归函数经典案例解析
    1.阶乘计算阶乘是一个常见的递归应用,定义为n!=n*(n-1)*…*1。deffactorial(n):ifn==0:return1else:returnn*factorial(n-1)print(factorial(5))#输出:1202.斐波那契数列斐波那契数列的每一项都......
  • 如何使用 python (使用服务帐户)在应用程序脚本 Web 应用程序上触发 doGet()?
    我想从返回json的应用程序脚本Web应用程序触发doGet(e)事件。我们的网络应用程序无法在我们的组织域之外访问,因此需要服务帐户。我执行了下面的代码,但“发生错误:401客户端错误”fromgoogle.oauth2importservice_accountfromgoogle.auth.transport.requestsimpor......