flask连接MySQL数据库
作者:mmseoamin日期:2024-04-01

flask连接MySQL数据,新手优先推荐使用pymysql降低出错的几率

下载驱动包pymysql,在终端使用命令安装,安装命令如下

pip install pymysql

安装flask_sqlalchemy包,使得flask在使用sqlalchemy时更加方便

pip install flask-sqlalchemy

1.Flask连接Mysql

新建flask项目,在app.py中编写

导入模块SQLAlchemy

from flask_sqlalchemy import SQLAlchemy

创建SQLAlchemy实例对象,命名为db,将flask的实例对象app作为参数传给SQLAlchemy,将db和app联系起来,可以调用其相关功能

db = SQLAlchemy(app)

2.在python中配置数据库信息

# MySQL所在主机名,默认127.0.0.1
HOSTNAME = "127.0.0.1"
# MySQL监听的端口号,默认3306
PORT = 3306
# 连接MySQL的用户名,自己设置
USERNAME = "root"
# 连接MySQL的密码,自己设置
PASSWORD = "root"
# MySQL上创建的数据库名称
DATABASE = "database_learn"
# 通过修改以下代码来操作不同的SQL比写原生SQL简单很多 --》通过ORM可以实现从底层更改使用的SQL
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"

使用数据库工具创建数据库并测试连接

with app.app_context():
    with db.engine.connect() as conn:
        result = conn.execute("select 1")
        print(result.fetchone())  # (1,)

返回(1,),连接成功

完整代码块如下

from flask import Flask
from flask_sqlalchemy import  SQLAlchemy
app = Flask(__name__)
# MySQL所在主机名
HOSTNAME = "127.0.0.1"
# MySQL监听的端口号,默认3306
PORT = 3306
# 连接MySQL的用户名,自己设置
USERNAME = "root"
# 连接MySQL的密码,自己设置
PASSWORD = "ding123456"
# MySQL上创建的数据库名称
DATABASE = "datebase_learn"
# 通过修改以下代码来操作不同的SQL比写原生SQL简单很多 --》通过ORM可以实现从底层更改使用的SQL
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
db = SQLAlchemy(app)
# 测试是否连接成功
with app.app_context():
    with db.engine.connect() as conn:
        result = conn.execute("select 1")
        print(result.fetchone())  # (1,)
@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'
if __name__ == '__main__':
    app.run()

错误提示

报错提示:Not an executable object: ‘select 1’

在以下代码提示错误

db=SQLAlchemy(app)
with app.app_context():
    with db.engine.connect() as conn:
        result = conn.execute("select 1")
        print(result.fetchone())

原因:'select 1’不是一个可执行的对象

解决方案:

文本sql的执行,需要使用sqlalchemy中的text()方法处理字符串,再执行语句

1.导入模块

from sqlalchemy import text

2.修改关键代码

将result = conn.execute("select 1")

修改为以下代码

result = conn.execute(text("select 1"))