该篇博客配置环境为: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

1.建立mysql和app的连接

在config.py中加入以下两项配置:

  1. SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:xxxxx@localhost:3306/test?charset=utf8'
    SQLALCHEMY_TRACK_MODIFICATIONS = True
  2.  
  3. 如此在app/__init__.py中加入
    app.config.from_object('config')
  1. db = SQLAlchemy(app)
  1. 就可以完成app和数据的关联,并生成一个可以操作app数据库的SQLAlchemy实例db
  2. 完整的app/__init__.py代码如下:
  1. from flask import Flask, url_for, request, redirect, render_template
  2. from flask_sqlalchemy import SQLAlchemy
  3. app = Flask(__name__)
  4. app.config.from_object('config')
  5. db = SQLAlchemy(app)
  6. from app import models,views
  1.  

2.创建app/models.py模块

上代码

  1. from app import db #db是在app/__init__.py生成的关联后的SQLAlchemy实例
  2.  
  3. class User(db.Model):
  4. __tablename__ = 'users'
  5. id = db.Column(db.Integer, primary_key=True)
  6. username = db.Column(db.String(80), unique=True)
  7. email = db.Column(db.String(320), unique=True)
  8. password = db.Column(db.String(32), nullable=False)
  9.  
  10. def __repr__(self):
  11. return '<User %r>' % self.username
  12.  
  13. class Admin(db.Model):
  14. __tablename__ = 'admins'
  15. id = db.Column(db.Integer, primary_key=True)
  16. username = db.Column(db.String(80), unique=True)
  17. email = db.Column(db.String(320), unique=True)
  18. password = db.Column(db.String(32), nullable=False)
  19.  
  20. def __repr__(self):
  21. return '<User %r>' % self.username

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

  1. #app/create_db.py
  1. from app import db
  2. db.create_all()

4.表已经创建完成了,接下来是我们的业务逻辑使用表的时候了

分别在user和admin蓝图中增加一个add用户的业务

#app/user.py

  1. from flask import Blueprint, render_template, redirect,request
  2. from app import db
  3. from .models import User
  4. user = Blueprint('user',__name__)
  5.  
  6. @user.route('/index')
  7. def index():
  8. return render_template('user/index.html')
  9.  
  10. @user.route('/add/',methods=['GET','POST'])
  11. def add():
  12. if request.method == 'POST':
  13. p_user = request.form.get('username',None)
  14. p_email = request.form.get('email',None)
  15. p_password = request.form.get('password',None)
  16.  
  17. if not p_user or not p_email or not p_password:
  18. return 'input error'
  19.  
  20. newobj = User(username=p_user, email=p_email, password=p_password)
  21. db.session.add(newobj)
  22. db.session.commit()
  23. users = User.query.all()
  24. return render_template('user/add.html',users=users)
  25. users = User.query.all()
  26. return render_template('user/add.html',users=users)
  27.  
  28. @user.route('/show')
  29. def show():
  30. return 'user_show'

#app/admin.py

  1. #admin.py
  2. from flask import Blueprint,render_template, request, redirect
  3. from app import db
  4. from .models import Admin
  5.  
  6. admin = Blueprint('admin',__name__)
  7.  
  8. @admin.route('/index')
  9. def index():
  10. return render_template('admin/index.html')
  11.  
  12. @admin.route('/add/',methods=['POST','GET'])
  13. def add():
  14. if request.method == 'POST':
  15. p_admin = request.form.get('username',None)
  16. p_email = request.form.get('email',None)
  17. p_password = request.form.get('password',None)
  18.  
  19. if not p_admin or not p_email or not p_password:
  20. return 'input error'
  21.  
  22. newobj = Admin(username=p_admin, email=p_email, password=p_password)
  23. db.session.add(newobj)
  24. db.session.commit()
  25. admins = Admin.query.all()
  26. return render_template('admin/add.html',admins=admins)
  27. admins = Admin.query.all()
  28. return render_template('admin/add.html',admins=admins)
  29.  
  30. @admin.route('/show')
  31. def show():
  32. return 'admin_show'

#app/templates/admin/add.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>AdminsAdd</title>
  6. </head>
  7. <body>
  8. <form action="/admin/add/" method="POST">
  9. user:<input type="text" name="username" />
  10. email:<input type="text" name="email" />
  11. pwd:<input type="password" name="password" />
  12. <input type="submit" value="add" />
  13. </form>
  14. {% if admins %}
  15. <table border="1px">
  16. <tr>
  17. <th>UserName</th>
  18. <th>Email</th>
  19. </tr>
  20. {% for u in admins %}
  21. <tr>
  22. <td>{{u.username}}</td>
  23. <td>{{u.email}}</td>
  24. </tr>
  25. {% endfor %}
  26. </table>
  27. {% endif %}
  28. </body>
  29. </html>

#app/templates/user/add.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>UserAdd</title>
  6. </head>
  7. <body>
  8. <form action="/user/add/" method="POST">
  9. user:<input type="text" name="username" />
  10. email:<input type="text" name="email" />
  11. pwd:<input type="password" name="password" />
  12. <input type="submit" value="add" />
  13. </form>
  14. {% if users %}
  15. <table border="1px">
  16. <tr>
  17. <th>UserName</th>
  18. <th>Email</th>
  19. </tr>
  20. {% for u in users %}
  21. <tr>
  22. <td>{{u.username}}</td>
  23. <td>{{u.email}}</td>
  24. </tr>
  25. {% endfor %}
  26. </table>
  27. {% endif %}
  28. </body>
  29. </html>

#app/views.py

  1. from app import app
  2. from .admin import admin
  3. from .user import user
  4.  
  5. app.register_blueprint(admin,url_prefix='/admin')
  6. app.register_blueprint(user, url_prefix='/user')

#run.py

  1. from app import app
  2. app.run()

到这里也就结束了,这样这个例子就结合了蓝图和flask-sqlalchemy.本例中只使用了db.session.add(),其它的还有db.session.delete()...

看一下效果:

localhost:5000/user/add

localhost:5000/admin/add


flask扩展模块flask-sqlachemy 的使用---mysql数据库的更多相关文章

  1. Flask与mysql数据库字段类型的区别以及基本用法

    Mysql里面的int在Flask中里面使用Integer Mysql里面的varcahar在Flask中里面使用String 与Mysql数据库需要导入模块 #导入第三方链接库sql点金术 from ...

  2. Flask中Mysql数据库的常见操作

    from flask import Flask,render_template #导入第三方链接库sql点金术 from flask_sqlalchemy import SQLAlchemy #建立对 ...

  3. flask连接mysql数据库

    from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_My ...

  4. flask + pymysql操作Mysql数据库

    安装flask-sqlalchemy.pymysql模块 pip install flask-sqlalchemy pymysql ### Flask-SQLAlchemy的介绍 1. ORM:Obj ...

  5. Flask项目中使用mysql数据库启动项目是发出警告

    Flask项目中使用mysql数据库启动项目是发出警告: Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA ...

  6. flask下直接展示mysql数据库 字段

    在工作中,会导出一份mysql的html来查看,用的是就是路过秋天大神的那个工具,所以想自己用那个样式直接在后端写一个页面做展示! 前端页面 from flask import Flask,reque ...

  7. Flask 操作Mysql数据库 - flask-sqlalchemy扩展

    数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的.它使用结构化的查询语言.关系型数据库的列定义了表中 ...

  8. python3 + flask + sqlalchemy +orm(1):链接mysql 数据库

    1.pycharm中新建一个flask项目 2.按装flask.PyMySQL.flask-sqlalchemy 3.项目下面新建一个config.py 文件 DEBUG = True #dialec ...

  9. Flask框架实现登录注册功能(mysql数据库)

    前言: 本例使用Flask框架完成登录和注册操作,包括前端(index.html,regist.html)和后端(app.py)两部分,前端页面不过多介绍,直接进入后端部分: 逻辑思路: 登录部分:运 ...

随机推荐

  1. Java 汉子转拼音

    1. 引入: pinyin4j-1.1.0 包;  http://pan.baidu.com/s/1eQ8a874 2. 转换; private static String ChineseToPiny ...

  2. iOS真机调试配置

    啊!生活不易啊~~~~据说这个过程都可以当做简历技能了... 准备:已经具备了企业开发者账号,和相关证书 目标:让爪机可以真机调试 过程:1.登录官方开发网站 https://developer.ap ...

  3. CentOS下成功修复了Windows的grub引导

    (转载) 以CentOS7和Windows为双系统,且后安装CentOS时,会出现开机没有Windows引导的问题.下图,倒数第二行可以看到Windows引导项: 修复运行终端(terminal),键 ...

  4. Subpub 订阅/发布

    var Pubsub = (function (window) { window.handlers = {}; var o = { pub: function () { var args = Arra ...

  5. OC--类型为ID 的类的名称

    NSString *str = [[view class] description];

  6. MyEclipse 修改项目字符集

    项目->右键+properties->Resource->Text file container->others->utf-8

  7. 笔记整理——C语言-http

    C语言 HTTP GZIP数据解压 - 大烧饼的实验室 - 博客园 - Google Chrome (2013/4/10 18:22:26) C语言 HTTP GZIP数据解压   这个代码在http ...

  8. bootstrap的alert提示框的关闭后再显示问题

    bootstrap中有alert组件,如果点击关闭按钮后该组件会被删除而不是被隐藏,想再显示怎么办呢? bootstrap-alert.js源码片段: function removeElement() ...

  9. 【续】强行在C# Winform中渲染Cocos2d-x 3.6

    [前言] 上一篇讲了怎么把Cocos2d-x 3.6渲染进MFC窗体,这里来讲一下怎么在C# Winform中做到同样的功能.如果你不熟悉MFC的使用但对C# Winform比较在行,请往下看. 这一 ...

  10. @dynamic、@synthesize

    声明property属性后,有2种实现选择: @synthesize 编译器期间,让编译器自动生成getter/setter方法. 当有自定义的存或取方法时,自定义会屏蔽自动生成该方法 @dynami ...