Flask连接mysql

写在前面

关于怎样使用python部署flask,在这篇博客中我已经进行了说明。
项目链接为:https://github.com/SEN-Wanted/BackEnd

项目文件结构

Appserver/
├── app
│   ├── static/      # 静态资源文件夹
│   ├── templates/   # 模板文件夹
│   ├── json_test/   # 用来存放测试文件
│   ├── __init__.py  # 初始化文件
│   ├── store_info.py # blueprint
│   ├── user_info.py # blueprint
│   ├── order_info.py # blueprint
│   ├── store_by_id.py # blueprint
│   ├── orders_by_user_id.py # blueprint
│   ├── type_search.py # blueprint
│   ├── user_login.py # blueprint
│   ├── models.py # 数据格式
│   ├── createdb.py # 创建数据库
│   └── view.py # 调用blueprint
├── config.py    # 配置文件
├── run.py # 主程序文件
├── requirements     # 需求文件
└── README.md

flask+mysql

这次预期项目为一个扫码点餐系统,关于是否使用mysql这个问题小组成员有不同的看法,觉得数据量太小没有必要使用mysql,但为了之后的优化,最终数据库选用的mysql。
在flask2.0中不再支持MySQLdb,因此选用pymysql。
1.建立连接
建立链接需要从两部分入手:

1.连接到mysql数据库(修改配置文件 - config.py2.使配置生效,SQLAlchemy实例化数据库(配置初始文件 - app/__init__.py

config.py

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:12345678@localhost:3306/mydb'
# 'mysql+pymysql://用户名称:密码@localhost:端口/数据库名称'
SQLALCHEMY_TRACK_MODIFICATIONS = True

app/__init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app, use_native_unicode='utf8')

from . import models,views,store_info,user_info,order_info,user_login,type_search

2.建立关系app/models.py
这个部分是将数据库中的各章表的元素及关系对应起来,构建对应的关系,可以用app/createdb.py进行文件创建,也可以定义关系之后直接对数据库中的对象进行操作,这一部分代码可以在项目地址中找到。

3.对数据库操作
这时对数据库进行操作其实就实例化一张表,from .models import User,通过实例化的张表进行进行操作。
例如:
有张用户表结构如下:
这里写图片描述
则app/model.py可以这样写:定义其关系如下

# -*- coding: utf-8 -*-
from datetime import datetime, date
from . import app
from . import db
from passlib.apps import custom_app_context as pwd_context
from itsdangerous import (TimedJSONWebSignatureSerializer
                          as Serializer, BadSignature, SignatureExpired)

class User(db.Model):
    """用户"""
    __tablename__ = 'users'
    __table_args__ = {'mysql_engine': 'InnoDB'}  # 支持事务操作和外键
    id = db.Column(db.String(32), doc='手机号码', primary_key=True)
    nickname = db.Column(db.String(20), doc='昵称', default='Wanted User', nullable=False, unique=True)
    password_hash = db.Column(db.String(128), doc='密码', nullable=False)
    payPassword = db.Column(db.String(32), doc='支付密码', nullable=False)
    money = db.Column(db.Float, doc='账户余额', default=50, nullable=False)
    description = db.Column(db.String(50), doc='个性签名', default='这个人很懒,什么也没留下', nullable=False)
    isAdmin = db.Column(db.Boolean, doc='是否管理员', default=False)

    orders = db.relationship('Order', backref='users', cascade='all', lazy='dynamic')
    coupons = db.relationship('Coupon', backref='users', cascade='all', lazy='dynamic')
    favorites = db.relationship('Favorite', backref='users', cascade='all', lazy='dynamic')
    comments = db.relationship('Comment', backref='users', cascade='all', lazy='dynamic')

现在我们想要新建一个用户:

 user1 = User(id = username, nickname= username, password_hash = password, payPassword = password, money = 0, isAdmin = 0)

查找用户nickname为“lalala“:

user_info1 = User.query.filter_by(nickname = 'lalala').first()

至此数据库连接和操作可以正常进行。

Logo

更多推荐