• FLASK-mysql


    最近想仔细学习下后台技术了,其中很重要的部分就是数据库,下面讲解FLASK搭配mysql实现数据库管理

    大体思路

    要实现数据库管理操作需要以下部分:

    1. 数据库的安装和使用
    2. 数据库框架(对数据库操作封装了)

    综上这次需要的部分就是:FLASK+flask-sqlalchemy+mysql

    数据库的安装和使用

    MYSQL安装教程: [https://www.runoob.com/w3cnote/windows10-mysql-installer.html]

    注意:有时候会发现没有安装MYSQL server那是你之前安装过,没有卸载干净。卸载干净后,重新安装试试。

    安装成功后,在任务栏中点击MySQL Workbench 8.0 CE

    1.创建库

    2.进入库

    3.运行库

    2.数据库操作

    # -*- coding: utf-8 -*-
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    
    
    
    
    
    app = Flask(__name__)
    
    app.config['SECRET_KEY'] = "123456" #一个字符串密码
    #在此登录的是root用户,要填上密码如123456,MySQL默认端口是3306。并填上创建的数据库名如youcaihua
    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:123456@127.0.0.1:3306/dbtest?charset=utf8"
    #设置下方这行code后,在每次请求结束后会自动提交数据库中的变动
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    
    db = SQLAlchemy(app)#实例化数据库对象,它提供访问Flask-SQLAlchemy的所有功能
    
    
    '''定义模型,建立关系'''
    class Role(db.Model):#所有模型的基类叫 db.Model,它存储在创建的SQLAlchemy实例上。
        #定义表名
        __tablename__ = 'roles'
    
        #定义对象
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        user = db.relationship('User', backref='role')
    
        #__repr__()方法显示一个可读字符串,虽然不是完全必要,不过用于调试、测试是很不错的。
        def __repr__(self):
            return '<Role {}>'.format(self.name)
    
    class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(64), unique=True, index=True)
        role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
        device = db.relationship('Device', backref='user')
    
        def __repr__(self):
            return '<User {}>'.format(self.username)
    
    class Device(db.Model):
        __tablename__ = 'device' #设备
        id = db.Column(db.Integer,primary_key=True)
        imei = db.Column(db.String(15), unique=True, index=True)
        user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    
        def __repr__(self):
            return '<User {}>'.format(self.imei)
    
    '''进行数据库操作'''
    if __name__ == '__main__':
        #删除旧表
        db.drop_all()
        db.create_all()#创建新表
    
        #给Role表,插入数据,3种角色
        admin_role = Role(name='Admin')
        mod_role = Role(name='Moderator')
        user_role = Role(name='User')
    
        #role属性也可使用,虽然它不是真正的数据序列,但却是一对多关系的高级表示。给User表插入3条数据
        user_john = User(username='john', role=admin_role)
        user_susan = User(username='susan', role=user_role)
        user_david = User(username='david', role=mod_role)
    
        device1 = Device(imei="1234567890", user=user_john)
        device2 = Device(imei="2222222222", user=user_susan)
    
        #在将对象写入数据库之前,先将其添加到会话中,数据库会话db.session和Flask session对象没有关系,数据库会话也称 事物 译作Database Transaction。
        db.session.add_all([admin_role, mod_role, user_role, user_john, user_susan, user_david])
        #提交会话到数据库
        db.session.commit()
    
        #修改roles名
        admin_role.name = 'Administrator'
        db.session.add(admin_role)
        db.session.commit()
    
        db.session.commit()#注意:删除 和插入、更新一样,都是在数据库会话提交后执行
    
        #测试1 列出user_john用户的所有设备
        print(Device.query.filter_by(user=user_john).all())
    
        #测试2 已知imei为2222222222的设备,列出用户名字
        print(Device.query.filter_by(imei="2222222222").first().user)
    
    
    不怕世界大,就怕格局小
  • 相关阅读:
    [Swift] Swift3.0--GCD
    [Android Pro] Swift 3.0多线程
    [MAC OS ] UserDefaults
    [MAC OS] NSOpenPanel 使用
    [ IOS ] iOS-控制器View的创建和生命周期
    [ IOS ] 视图控制对象ViewController的生命周期
    [Android Pro] AtomicInteger的用法
    [MAC OS] 常用工具
    [MAC OS] NSButton tag 获取
    [MAC OS] XCode中的Debug View Hierarchy功能
  • 原文地址:https://www.cnblogs.com/wangjian1226/p/12548151.html
Copyright © 2020-2023  润新知