写点什么

Python 进阶 (五十二)Flask 使用 pymysql 连接 MySQL 数据库

  • 2022-11-18
    上海
  • 本文字数:1837 字

    阅读完需:约 6 分钟

Python进阶(五十二)Flask使用pymysql连接MySQL数据库

一、前言

  • Python:3.5

  • Flask:0.12.1

  • Pymysql:0.7.10

  • MySQL:5.5


之前在做 Python Web 开发时,选择的是 Django 框架,后台的自动化实现着实十分方便。相关博文参见《Python进阶(三十六)-Web框架Django项目搭建全过程》、《 Python进阶(二十三)-Django使用pymysql连接MySQL数据库做增删改查》。对于知识的渴求,驱使我尝试使用 Flask 实现 Web 开发。


在利用 Flask 实现研究课题相关系统时,涉及到数据库相关操作。由于使用 Python3 开发语言,python3 中已经不再支持 MySQLdb 模块,所以这里使用 pymysql 数据库连接组件,安装 pymysql:


pip install pymysql
复制代码


Flask 拥有丰富的扩展组件,数据库管理方面 Flask-SQLAlchemy 简化了数据库管理的操作。SQLAlchemy 是一个很强大的关系型数据库框架,支持多种数据库后台。其不但提供了高层 ORM,而且也提供了使用数据库原生 SQL 的底层功能。和其他大多数扩展一样,Flask-SQLAlchemy 也使用 pip 安装:


pip install flask-sqlalchemy
复制代码

二、mysql 连接配置

mysql 连接配置代码如下:


from flask_sqlalchemy import SQLAlchemy# 配置数据库连接app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://lmapp:lmapp@localhost/smp'app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = Trueapp.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Truedb = SQLAlchemy(app)# 创建用户角色表class Role(db.Model):    __tablename__ = 'role'    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(64), unique=True, nullable=True)  # 定义一对多关联关系    user = db.relationship('User', backref='role')
def __repr__(self): return '<Role %r>' % self.name# 创建用户表class User(db.Model): __tablename__ = 'user' uid = db.Column(db.String(11), primary_key=True) uname = db.Column(db.String(11), unique=True, nullable=True) pwd = db.Column(db.String(11), nullable=True) phone = db.Column(db.String(11), nullable=True) regtime = db.Column(db.String(20), nullable=True) stat = db.Column(db.String(1), nullable=True) # 定义外键 role_id = db.Column(db.Integer, db.ForeignKey('role.id'))
def __repr__(self): return '<User %r>' % self.uname
复制代码


之前在配置数据库 URL 时,语句为:


app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://lmapp:lmapp@localhost/smp'
复制代码


在创建表时出现‘ImportError: No module named MySQLdb’错误提示。经过一番搜索,发现将配置语句改为


app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://lmapp:lmapp@localhost/smp'
复制代码


就可以了。

三、拓展阅读

自动生成依赖包信息


pip freeze>Requirements.txt
复制代码


安装依赖包


pip install -r Requirements.txt
复制代码

四、延伸阅读

Flask Web开发:基于Python的Web应用开发实战


Learning Python, 5th Edition


Flask Web开发:基于Python的Web应用开发实战


Learning Python, 5th Edition


五、拓展阅读 Flask 文件上传提示 PermissionError: [Errno 13] Permission denied: ‘E:\\IDEA Projects\\Data‘

在学习 Flask 文件上传过程中,按照视频教学中的示例代码敲了一遍,执行时却提示'PermissionError: [Errno 13] Permission denied: 'E:\\IDEA Projects\\Data'的错误,但是视频中却是可以正常操作。具体代码如下:


@app.route('/upload', methods=['GET', 'POST'])def upload():    if request.method == 'POST':        f = request.files['file']        basepath = path.abspath(path.dirname(__file__))        upload_path = path.join(basepath, 'static\\uploads')        f.save(upload_path, secure_filename(f.filename))        return redirect(url_for('upload'))    return render_template('upload.html')
复制代码

经过网络搜索,将代码更改为如下代码时,文件可以成功上传。


@app.route('/upload', methods=['GET', 'POST'])def upload():    if request.method == 'POST':        f = request.files['file']        basepath = path.abspath(path.dirname(__file__))        upload_path = path.join(basepath, 'static', 'uploads', secure_filename(f.filename))        f.save(upload_path)        return redirect(url_for('upload'))    return render_template('upload.html')
复制代码


经过代码对比,发现原来是 save()方法的参数搞错了。

发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021-07-09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
Python进阶(五十二)Flask使用pymysql连接MySQL数据库_Python_No Silver Bullet_InfoQ写作社区