当前位置: 首页 > article >正文

python3 Flask应用 使用 Flask-SQLAlchemy操作MySQL数据库

一、环境搭建

下载命令:

pip install flask flask-sqlalchemy pymysql

二、创建项目结构

yourProjectFolder/
|—— app.py
|—— config.py
|—— models.py
|__ mydb.py

三、基本使用 

3.1 config.py 进行数据库连接配置

import os

basedir = os.path.abspath(os.path.dirname(__file__))


class Config(object):
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://用户名:密码@数据库地址/数据库名'
    SQLALCHEMY_TRACK_MODIFICATIONS = False  # 关闭修改跟踪,节省资源

3.2 models.py 定义数据库模型

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='主键id')
    username = db.Column(db.String(255), index=True, unique=True, nullable=False, comment='用户名(手机号)')
    password = db.Column(db.String(255), nullable=False, comment='密码')
    ip = db.Column(db.String(255), nullable=True, default=None, comment='注册时IP地址')
    ipCity = db.Column(db.String(255), nullable=True, default=None, comment='注册时的ip所在地')
    registerTime = db.Column(db.String(255), nullable=True, default=None, comment='注册时间')

    def __repr__(self):
        return '<User {}>'.format(self.username)

 3.3 mydb.py 增删改查例子

from flask import Flask
from sqlalchemy.exc import SQLAlchemyError

from config import Config
from models import db, User


app = Flask(__name__)
app.config.from_object(Config)

# 初始化数据库
db.init_app(app)


# 新增例子
def insert(username, password, ip, ip_city, register_time):
    is_user = login_user_db(username)
    if is_user is not None:
        return 1
    else:
        with app.app_context():
            try:
                u = User(username=username, password=password, ip=ip, ipCity=ip_city, registerTime=register_time)
                db.session.add(u)
                db.session.commit()
                return 2
            except Exception as e:
                db.session.rollback()
                print(f"发生错误: {e}")
                return 3


# 查询例子
def select(username):
    with app.app_context():
        return User.query.filter_by(username=username).first()
        # 稍微复杂一点的查询
        # return User.query.filter(User.username.like('%john%')).first()


# 修改例子
def update(username,password):
    with app.app_context():
        try:
            user = User.query.filter_by(username=username).first()
            if user:
                user.password = str(password)
                db.session.commit()
                return True
            else:
                print(f"密码重置用户 {username} 没有.")
                return False
        except SQLAlchemyError as e:
            db.session.rollback()
            print(f"An error occurred: {e}")
            return False


# 删除例子
def delete(username):
    with app.app_context():
        try:
            # 查找用户 通过用户名
            user = User.query.filter_by(username=username)
            # .get()方法用的是主键
            # user = User.query.get(1) 
            if user:
                db.session.delete(user)  # 删除用户
                db.session.commit()  # 提交事务
                return True
            else:
                print(f"没有找到用户 {username}.")
                return False
        except SQLAlchemyError as e:
            db.session.rollback()  # 回滚事务
            print(f"An error occurred: {e}")
            return False

  3.3 app.py 调用 增删该查例子

import mydb

mydb.update(username=username, password=password)
db_user = mydb.select(username)
db_user.id
db_user.username
db_user.password

 

 


http://www.kler.cn/a/402965.html

相关文章:

  • 网络协议之邮件协议(SMTP、POP3与IMAP)
  • Qt 的事件投递机制:从基础到实战
  • HBase Java基础操作
  • 滑动窗口篇——如行云流水般的高效解法与智能之道(1)
  • C:mbedtls库实现https双向认证连接示例_七侠镇莫尛貝大侠20241122
  • 深度解析神经网络中的最大池化层:工作原理、参数配置与应用示例
  • 鸿蒙开发:ForEach中为什么键值生成函数很重要
  • # 07_ Python基础到实战一飞冲天(二)-python基础(七)--变量类型计算与输入输出
  • 鸿蒙HarmonyOS开发:一次开发,多端部署(工程级)三层工程架构
  • Hadoop 架构
  • 使用 SMB 协议从win10电脑访问同网段ubuntu电脑文件
  • Node.js 笔记(一):express路由
  • 【docker】退出 `docker run`的几种方式
  • linux 常用命令指南(存储分区、存储挂载、docker迁移)
  • IDEA相关(包括但不限于快捷键,使用技巧)成长笔记
  • Unity图形学之Shader顶点变化
  • 在使用 TypeORM 的项目中,如果不希望查询返回 password 字段,可以通过以下几种方式实现
  • 说说数字化的误区
  • MongoDB进阶篇-索引(索引概述、索引的类型、索引相关操作、索引的使用)
  • 数据建模-业务分类、数据域、主题
  • 【Linux课程学习】:对操作系统(Operator System)的理解
  • 李春葆《数据结构》——图相关代码
  • JVM垃圾回收算法详解
  • C语言内存:我家大门常打开
  • 手机ip地址异常怎么解决
  • tcn 对比 cnn-attension-gru联合模型,时间序列预测,深度神经网络