一、前言
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:
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'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = 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()方法的参数搞错了。
评论