python3.5+flask+mysql

该篇博客配置环境为: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中加入以下两项配置:

SQLALCHEMY_DATABASE_URI = ‘mysql+pymysql://root:[email protected]: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代码如下:

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()

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

localhost:5000/admin/add


时间: 2024-10-16 23:47:33

python3.5+flask+mysql的相关文章

Python+Flask+MysqL的web建设技术过程

前言 本人在一学期时间实现了Python+Flask+MysqL的web建设,页面具有简单的登录注册发布文章搜索文章等功能. 这篇文章总结了我最近一段时间的学习成果:使用Flask框架搭建一个web service,并在其中加上一些简单的css,js,html等.在本文中以实际的用户模块为例.之所以写这篇文章是因为想要总结自己一学期的学习成果并且与大家分享.由于是新手如有错漏请见谅. 一.使用工具 python3.5 实现此页面所有的static文件.templates文件与py文件 二.完成基

用python3.x与mysql数据库构建简单的爬虫系统(转)

这是在博客园的第一篇文章,由于本人还是一个编程菜鸟,也写不出那些高大上的牛逼文章,这篇文章就是对自己这段时间学习python的一个总结吧. 众所周知python是一门对初学编程的人相当友好的编程语言,就像本屌丝一样,一学就对它产生好感了!当然,想要精通它还有很多东西需要学习.那废话不多说了,下面我就来说一下如何用python3.x与mysql数据库构建一个简单的爬虫系统(其实就是把从网页上爬下来的内容存储到mysql数据库中). 首先就是搭建环境了,这里就简介绍一下我的环境吧.本机的操作系统是w

Python3.5连接Mysql

Python3.5连接Mysql Python版本: 3.5.0 MySqlDB官网只支持Python3.4,这里Python3.5使用第三方库PyMysql连接Mysql数据库. http://dev.mysql.com/downloads/connector/python/2.0.html PyMysql下载地址: https://pypi.python.org/pypi/PyMySQL#downloads Windows下安装方法: 下载解压后,进入PyMySql-0.6.7目录,执行py

SAE用flask+MySQL中文&#39;utf8&#39; codec can&#39;t decode byte 0xb7解决方法

在Sina App Engine(SAE)上用python flask框架+MySQL搭app服务器时,select返回中文时jsonify函数报如下错误:(为调试放拜我异常时return的traceback.format_exc()) Traceback (most recent call last): File "/data1/www/htdocs/245/jcguo/1/myapp.py", line 88, in searchHotel return jsonify(resul

bootstrap+flask+mysql编写查询页面

之前那篇文章是flask+redis的,如果用flask+mysql怎么实现呢? 创建数据库: CREATE DATABASE `web12306`  DEFAULT CHARACTER SET utf8; 创建表: CREATE TABLE `web12306` (   `user_email` varchar(100) NOT NULL DEFAULT '',   `user_pass` varchar(100) NOT NULL DEFAULT '',   `user_name` varc

python3.4连接mysql数据库的方法

python3.4连接mysql数据库的方法 发布时间:2014-08-04编辑:www.jbxue.com 本文介绍了python3.4连接mysql数据库的方法,在python3.4中不能用mysqldb连接mysql,可以使用pymysql完成连接mysql数据库,需要的朋友参考下. 在python3.4中用原来python2.7的mysqldb已不能连接mysql数据库了. 喜欢mysqldb的朋友,可以参考: Python实例 mysqldb操作数据库 python MySQLdb操作

ubantu中搭建virtualenv+python3.4+flask

上一篇文章是基于ubantu14.04自带的Python2.7搭建的virtualenv+python+flask(需要特别注意文件夹是中文的问题),今天忙碌了三个小时,在网上大量查阅资料完成了virtualenv+python3.4+flask的搭建,如果不单独打一个python3的环境出来,运行python3的文件时是无法找到flask的,因为3与2是冲突的,所以建议最好还是搭建一个python3的虚拟环境,二者也可以切换(键入命令:deactivate),下面是详细步骤: 1.在普通环境下

在python3中安装mysql扩展,No module named &#39;ConfigParser&#39;

在python2.7中,我们安装的是 MySqldb或这 MySQL-python,能够正却安装,但在python3中,由于 其使用的扩展  ConfigParser 已经改名为 configparser,所以在python3 不能正常按转了.. 在 stackoverflow 中的解释: In Python 3, ConfigParser has been renamed to configparser for PEP 8 compliance. It looks like the packa

Python3中使用Mysql的用法。

一.Python2中一般使用MySqldb来调用Mysql,但是在Python3中不支持该包,使用pymysql来代替了,用法一模一样. 二.安装: pip install pymysql 三.例子: #coding utf-8 import pymysql try: conn = pymysql.connect(host='localhost',user="root",password='123456',database='datarepair',port=3306,charset=