设为首页 收藏本站
查看: 665|回复: 0

[经验分享] flask扩展模块flask-sqlachemy 的使用

[复制链接]

尚未签到

发表于 2017-12-12 22:44:30 | 显示全部楼层 |阅读模式
  该篇博客配置环境为:python版本3.5,flask2.0,python3中已经不再支持MySQLdb模块,所有这里我用了pymysql,所有使用前应该
  安装pymysql:pip install pymysql
  在网上的好多资料都给的是使用sqlite的例子,由于很不喜欢所以今天分享一下flask-sqlalchemy操作mysql的方法.
  以前习惯使用sqlalchemy,后来发现使用flask-sqlchemy还是要简单一些(起码省去了好多模块和类的导入,create_engine,sessionmaker,declarative。。。)不过flask官方的例子用的是sqlchemy,去官网, flask-sqlalchemy官方文档
  这里写一个简单的flask web程序,来说明flask-sqlalchemy如何驱动msyql数据库.为了偷懒,这个例子以上一篇博文flask蓝图的使用为基础.
  首先看一下程序结构:
  相比上一节只多了两个文件,create_db.py,models.py
   DSC0000.png
  1.建立mysql和app的连接
  在config.py中加入以下两项配置:
  

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:xxxxx@localhost:3306/test?'  SQLALCHEMY_TRACK_MODIFICATIONS = True
  app.config.from_object(
  

db = SQLAlchemy(app)  

就可以完成app和数据的关联,并生成一个可以操作app数据库的SQLAlchemy实例db  完整的app/__init__.py代码如下:
  

  

from flask import Flask, url_for, request, redirect, render_template  

from flask_sqlalchemy import SQLAlchemy  
app
= Flask(__name__)  
app.config.from_object(
'config')  
db
= SQLAlchemy(app)  

from app import models,views  

  

  

  2.创建app/models.py模块
  上代码
  

from app import db #db是在app/__init__.py生成的关联后的SQLAlchemy实例  

  

class User(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 '<User %r>' % self.username  

  

  

class Admin(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 '<User %r>' % self.username  

  3.创建create_db.py,表结构设计完成后执行python create_db.py即可完成表的创建,如下图
  

#app/create_db.py  

  

from app import db  
db.create_all()
  

DSC0001.png

  4.表已经创建完成了,接下来是我们的业务逻辑使用表的时候了
  分别在user和admin蓝图中增加一个add用户的业务
  #app/user.py
  

from flask import Blueprint, render_template, redirect,request  

from app import db  

from .models import User  
user
= Blueprint('user',__name__)  

  
@user.route(
'/index')  

def index():return render_template('user/index.html')  

  
@user.route(
'/add/',methods=['GET','POST'])  

def add():if request.method == 'POST':  p_user
= request.form.get('username',None)  p_email
= request.form.get('email',None)  p_password
= request.form.get('password',None)  

if not p_user or not p_email or not p_password:return 'input error'  

  newobj
= User(username=p_user, email=p_email, password=p_password)  db.session.add(newobj)
  db.session.commit()
  users
= User.query.all()return render_template('user/add.html',users=users)  users
= User.query.all()return render_template('user/add.html',users=users)  

  
@user.route(
'/show')  

def show():return 'user_show'  

  #app/admin.py
  

#admin.py  
from flask import Blueprint,render_template, request, redirect
  
from app import db
  
from .models import Admin
  

  
admin = Blueprint('admin',__name__)
  

  
@admin.route('/index')
  
def index():
  return render_template('admin/index.html')
  

  
@admin.route('/add/',methods=['POST','GET'])
  
def add():
  if request.method == 'POST':
  p_admin = request.form.get('username',None)
  p_email = request.form.get('email',None)
  p_password = request.form.get('password',None)
  

  if not p_admin or not p_email or not p_password:
  return 'input error'
  

  newobj = Admin(username=p_admin, email=p_email, password=p_password)
  db.session.add(newobj)
  db.session.commit()
  admins = Admin.query.all()
  return render_template('admin/add.html',admins=admins)
  admins = Admin.query.all()
  return render_template('admin/add.html',admins=admins)
  

  
@admin.route('/show')
  
def show():
  return 'admin_show'
  

  #app/templates/admin/add.html
  

<!DOCTYPE html>  
<html lang="en">
  
<head>
  <meta charset="UTF-8">
  <title>AdminsAdd</title>
  
</head>
  
<body>
  
<form action="/admin/add/" method="POST">
  user:<input type="text" name="username" />
  email:<input type="text" name="email" />
  pwd:<input type="password" name="password" />
  <input type="submit" value="add" />
  
</form>
  
{% if admins %}
  
<table border="1px">
  <tr>
  <th>UserName</th>
  <th>Email</th>
  </tr>
  {% for u in admins %}
  <tr>
  <td>{{u.username}}</td>
  <td>{{u.email}}</td>
  </tr>
  {% endfor %}
  
</table>
  
{% endif %}
  
</body>
  
</html>
  

  #app/templates/user/add.html
  

<!DOCTYPE html>  
<html lang="en">
  
<head>
  <meta charset="UTF-8">
  <title>UserAdd</title>
  
</head>
  
<body>
  
<form action="/user/add/" method="POST">
  user:<input type="text" name="username" />
  email:<input type="text" name="email" />
  pwd:<input type="password" name="password" />
  <input type="submit" value="add" />
  
</form>
  
{% if users %}
  
<table border="1px">
  <tr>
  <th>UserName</th>
  <th>Email</th>
  </tr>
  {% for u in users %}
  <tr>
  <td>{{u.username}}</td>
  <td>{{u.email}}</td>
  </tr>
  {% endfor %}
  
</table>
  
{% endif %}
  
</body>
  
</html>
  

  #app/views.py
  

from app import app  
from .admin import admin
  
from .user import user
  

  
app.register_blueprint(admin,url_prefix='/admin')
  
app.register_blueprint(user, url_prefix='/user')
  

  #run.py
  

from app import app  
app.run()
  

  到这里也就结束了,这样这个例子就结合了蓝图和flask-sqlalchemy.本例中只使用了db.session.add(),其它的还有db.session.delete()...
  看一下效果:
  localhost:5000/user/add
DSC0002.png

  localhost:5000/admin/add
DSC0003.png

DSC0004.png

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-423490-1-1.html 上篇帖子: Linux下安装MySQL数据库(压缩包方式安装) 下篇帖子: MySql踩坑总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表