如何使用python从mysql数据库中删除

时间:2018-11-18 17:33:35

标签: python mysql flask

当我转到以下网址时,我想删除MySQL数据库中的某些条目:http://127.0.0.1:8080/api/td

我有一个名为database.py的文件,它具有:

engine = create_engine(config.database_uri)
def delete():
    with engine.connect() as con:
        con.execute("delete from INS where a = 2;")

我有一个名为 init .py的文件,它具有:

@app.route('/api/td', methods=["DELETE"])
def update():
    database.delete()
    return 'succefully'

当我转到http://127.0.0.1:8080/api/td时,出现以下错误: 连接到http://127.0.0.1:8080/api/td时出错。

上面的方法对于多个get请求非常有效。但这不适用于我的删除请求。这两个文件都有其他代码和导入。

1 个答案:

答案 0 :(得分:0)

原因:

通过浏览器访问路线时,它将执行GET请求。

因此,访问仅使用/api/td方法声明的DELETE会导致Method not allowed错误。

Method not allowed error while accessing a route with DELETE method

解决方案:

要解决此问题,我们需要使用GET而不是DELETE的方法声明路由:

@app.route("/api/td", methods=['GET'])

我创建了一个虚拟应用程序以从MySQL数据库表中删除一行。

app.py

from flask import Flask
from database import Database

app = Flask(__name__)
database = Database()

@app.route("/api/td", methods=['GET'])
def delete_row():
    return database.delete()

app.run(debug=True, port=8080)

database.py

from sqlalchemy import create_engine

class Database(object):
    def __init__(self):
        # dialect+driver://username:password@host:port/database
        self.engine = create_engine('mysql://root:123@localhost/practice_db')

    def delete(self):
        try:
            with self.engine.connect() as con:
                con.execute('DELETE FROM `user_table` WHERE `id`=2')
                return 'Deleted successfully'
        except Exception as e:
            return "Exception occurs: {}".format(str(e))

requirements.txt

Click==7.0
Flask==1.0.2
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
mysqlclient==1.3.13
SQLAlchemy==1.2.14
Werkzeug==0.14.1

屏幕截图:

deleted database row