flask框架配置mysql数据库操作详解
本文实例讲述了flask框架配置mysql数据库操作。分享给大家供大家参考,具体如下:
该篇博客配置环境为:python版本3.5,flask2.0,python3中已经不再支持MySQLdb模块,所有这里我用了pymysql,所有使用前应该
安装pymysql:
pipinstallpymysql
在网上的好多资料都给的是使用sqlite的例子,由于很不喜欢所以今天分享一下flask-sqlalchemy操作mysql的方法.
以前习惯使用sqlalchemy,后来发现使用flask-sqlchemy还是要简单一些(起码省去了好多模块和类的导入,create_engine,sessionmaker,declarative。。。)不过flask官方的例子用的是sqlchemy,去官网,flask-sqlalchemy官方文档
这里写一个简单的flaskweb程序,来说明flask-sqlalchemy如何驱动msyql数据库.为了偷懒,这个例子以上一篇博文flask蓝图的使用为基础.
首先看一下程序结构:
相比上一节只多了两个文件,create_db.py,models.py
1.建立mysql和app的连接
在config.py中加入以下两项配置:
SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:xxxxx@localhost:3306/test?charset=utf8' SQLALCHEMY_TRACK_MODIFICATIONS=True
如此在app/__init__.py中加入
app.config.from_object('config') db=SQLAlchemy(app)
就可以完成app和数据的关联,并生成一个可以操作app数据库的SQLAlchemy实例db
完整的app/__init__.py代码如下:
fromflaskimportFlask,url_for,request,redirect,render_template fromflask_sqlalchemyimportSQLAlchemy app=Flask(__name__) app.config.from_object('config') db=SQLAlchemy(app) fromappimportmodels,views
2.创建app/models.py模块
上代码
fromappimportdb#db是在app/__init__.py生成的关联后的SQLAlchemy实例
classUser(db.Model): __tablename__='users' id=db.Column(db.Integer,primary_key=True) username=db.Column(db.String(80),unique=True) email=db.Column(db.String(320),unique=True) password=db.Column(db.String(32),nullable=False) def__repr__(self): return''%self.username classAdmin(db.Model): __tablename__='admins' id=db.Column(db.Integer,primary_key=True) username=db.Column(db.String(80),unique=True) email=db.Column(db.String(320),unique=True) password=db.Column(db.String(32),nullable=False) def__repr__(self): return' '%self.username
3.创建create_db.py,表结构设计完成后执行pythoncreate_db.py即可完成表的创建,如下图
#app/create_db.py
fromappimportdb db.create_all()
4.表已经创建完成了,接下来是我们的业务逻辑使用表的时候了
分别在user和admin蓝图中增加一个add用户的业务
#app/user.py
fromflaskimportBlueprint,render_template,redirect,request fromappimportdb from.modelsimportUser user=Blueprint('user',__name__) @user.route('/index') defindex(): returnrender_template('user/index.html') @user.route('/add/',methods=['GET','POST']) defadd(): ifrequest.method=='POST': p_user=request.form.get('username',None) p_email=request.form.get('email',None) p_password=request.form.get('password',None) ifnotp_userornotp_emailornotp_password: return'inputerror' newobj=User(username=p_user,email=p_email,password=p_password) db.session.add(newobj) db.session.commit() users=User.query.all() returnrender_template('user/add.html',users=users) users=User.query.all() returnrender_template('user/add.html',users=users) @user.route('/show') defshow(): return'user_show'
#app/admin.py
#admin.py fromflaskimportBlueprint,render_template,request,redirect fromappimportdb from.modelsimportAdmin admin=Blueprint('admin',__name__) @admin.route('/index') defindex(): returnrender_template('admin/index.html') @admin.route('/add/',methods=['POST','GET']) defadd(): ifrequest.method=='POST': p_admin=request.form.get('username',None) p_email=request.form.get('email',None) p_password=request.form.get('password',None) ifnotp_adminornotp_emailornotp_password: return'inputerror' newobj=Admin(username=p_admin,email=p_email,password=p_password) db.session.add(newobj) db.session.commit() admins=Admin.query.all() returnrender_template('admin/add.html',admins=admins) admins=Admin.query.all() returnrender_template('admin/add.html',admins=admins) @admin.route('/show') defshow(): return'admin_show'
#app/templates/admin/add.html
AdminsAdd user: email: pwd: {%ifadmins%} {%foruinadmins%} UserName {%endfor%} {%endif%} {{u.username}} {{u.email}}