在 Flask 中连接 MySQL 数据库

Salman Mehmood 2022年7月18日
在 Flask 中连接 MySQL 数据库

通过这个解释,我们将学习如何在 flask_mysqldb 的帮助下在 Flask 中连接 MySQL 数据库。我们还将学习如何在线设置数据库。

借助 flask_mysqldb 在 Flask 中连接 MySQL 数据库

有时用户希望直接在 SQL 中编写查询,而不是使用诸如 sql-alchemy 之类的东西,因此无论出于何种原因,你都可以选择编写查询 SQL。在 Flask 中,mysqldb 允许你这样做。

现在我们将在名为 freemysqlhosting.net 的服务上创建一个免费的 MySQL 数据库。你可以使用此链接访问该网站。

创建帐户后,你将看到如下所示的屏幕,当你创建数据库时,你将在 15 分钟内收到一封包含你的数据库信息的电子邮件。

免费的 MySQL 托管

现在我们将使用这个数据库来获取我们的 Flask 应用程序中的信息。我们要做的第一件事是安装一个名为 Flask-MySQLdb 的模块。

pip install Flask-MySQLdb

现在我们需要导入所需的库:

from flask import Flask
from flask_mysqldb import MySQL

现在我们将创建一个应用程序实例并使用 MySQL(app) 类实例化该应用程序。如果你正在使用多个 Flask 应用程序,你还可以使用以下代码来指定你的 Flask 应用程序:

mysql = MySQL()
mysql.init_app(app)

但是我们将所有内容都放在一个文件中,因此我们不需要这样做。由于我们正在使用数据库,因此我们需要设置配置。

首先,我们需要定义 MYSQL_USER,然后我们需要 MYSQL_PASSWORD。我们还需要定义数据库所在的 MYSQL_HOST;它可以在你的本地计算机上,也可以在我们已经设置的单独服务上或其他任何地方。

我们也有数据库本身,所以我们必须定义数据库的名称。我们会添加一些不必要的额外配置,这有助于获取返回的数据。

它只需要元组,但在涉及数据库时字典更容易使用,因为列可以是键,而这些键的值将是特定列中的值。如果我们不添加任何内容,则默认采用元组。

app.config['MYSQL_USER'] = 'user_name'
app.config['MYSQL_PASSWORD'] = 'user_password'
app.config['MYSQL_HOST'] = 'sql3.example.net'
app.config['MYSQL_DB'] = 'Database_name'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

mysql = MySQL(app)

可以放端口,但是 MySQL 数据库默认使用 3306,所以我们不需要更新任何东西。现在我们要与数据库交互,因此我们将创建路由并创建一个名为 CONNECT_DB() 的函数,并且要与数据库交互,我们需要使用游标。

游标将允许我们执行语句以获取这些语句的结果。我们将创建一个名为 CS 的变量并使用 mysql.connection.cursor() 对其进行实例化,我们还将创建一个表并将其命名为 TABLE_NAME,我们将定义几个列。

@app.route('/')
def CONNECT_DB():
    CS = mysql.connection.cursor()
    CS.execute('''CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))''')

我们已经创建了表并将数据插入到表中。然后,我们需要在插入数据或更新或删除后提交。

当数据插入数据库时​​,我们还将返回一个字符串。

CS.execute('''INSERT INTO TABLE_NAME VALUES (1, 'Harry')''')
CS.execute('''INSERT INTO TABLE_NAME VALUES (2, 'Arthor')''')
mysql.connection.commit()
return 'Executed successfully'

让我们继续运行服务器,看看浏览器是否返回了字符串。确保你的互联网连接已连接。

Flask MySQL - 输出 1

我们将需要验证数据是否已插入数据库。现在将进行查询以选择表。

由于我们将检索多行,我们可以使用 fetchall()。我们将把所有信息放入 Executed_DATA 变量中。

我们将其打印到控制台并显示返回值:

CS.execute('''SELECT * FROM TABLE_NAME''')
Executed_DATA = CS.fetchall()
print(Executed_DATA)
return str(Executed_DATA[1]['name'])

让我们保存并刷新页面。我们可以看到显示的值,如果我们在控制台中向下看,我们可以看到一个包含两个项目的元组。

Flask MySQL - 输出 2

完整的 Python 代码:

from flask import Flask
from flask_mysqldb import MySQL

app = Flask(__name__)

app.config['MYSQL_USER'] = 'user_name'
app.config['MYSQL_PASSWORD'] = 'user_password'
app.config['MYSQL_HOST'] = 'sql3.example.net'
app.config['MYSQL_DB'] = 'Database_name'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

mysql = MySQL(app)

# mysql.init_app(app)

@app.route('/')
def CONNECT_DB():
    CS = mysql.connection.cursor()
    # CS.execute('''CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))''')

    # CS.execute('''INSERT INTO TABLE_NAME VALUES (1, 'Harry')''')
    # CS.execute('''INSERT INTO TABLE_NAME VALUES (2, 'Arthor')''')
    # mysql.connection.commit()
    # return 'Executed successfully'

    CS.execute('''SELECT * FROM TABLE_NAME''')
    Executed_DATA = CS.fetchall()
    print(Executed_DATA)
    return str(Executed_DATA[1]['name'])

if __name__=='__main__':
    app.run(debug=True)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn