【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比

简介: 【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比

sqlalchemy创建数据模型

# sqlalchemy的基本使用
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String, Text, Date, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from settings import DB_URI

engine = create_engine(DB_URI)
# 所有的类都要继承自`declarative_base`这个函数生成的基类
Base = declarative_base(engine)
Session = sessionmaker(bind=engine)


# 用户信息表
class User(Base):
    # 定义表名为users
    __tablename__ = 'users'
    # 将id设置为主键,并且默认是自增长的
    id = Column(Integer, primary_key=True)
    # name字段,字符类型,最大的长度是50个字符
    username = Column(String(50))
    password = Column(String(50))

    # 让打印出来的数据更好看,可选的
    def __repr__(self):
        return "<User(id='%s',username='%s',password='%s')>" % (self.id, self.username, self.password)


# 管理员信息表
class Admin(Base):
    __tablename__ = 'admin'
    id = Column(Integer, primary_key=True)
    username = Column(String(50))
    password = Column(String(50))

    def __repr__(self):
        return "<Admin(id='%s',username='%s',password='%s')>" % (self.id, self.username, self.password)


# 柱状图数据表
class DataBar(Base):
    __tablename__ = 'databar'
    id = Column(Integer, primary_key=True)
    label = Column(Integer)
    data = Column(Integer)

    def __repr__(self):
        return "<DataBar(id='%s',label='%s',data='%s')>" % (self.id, self.label, self.data)


# 线状图数据表
class DataLine(Base):
    __tablename__ = 'dataline'
    id = Column(Integer, primary_key=True)
    label = Column(Integer)
    data = Column(Integer)

    def __repr__(self):
        return "<DataLine(id='%s',label='%s',data='%s')>" % (self.id, self.label, self.data)


# 单位名称映射表
class Unit(Base):
    __tablename__ = 'unit'
    id = Column(Integer, primary_key=True)
    unitname = Column(String(50))
    contents = relationship('Content', back_populates='unit')

    def __repr__(self):
        return "<Unit(id='%s',unitname='%s')>" % (self.id, self.unitname)


# 问题分类映射表
class Category(Base):
    __tablename__ = 'category'
    id = Column(Integer, primary_key=True)
    category = Column(String(50))
    contents = relationship('Content', back_populates='category')

    def __repr__(self):
        return "<Unit(id='%s',unitname='%s')>" % (self.id, self.unitname)


# 情况登记表,问题,问题类型编号,单位编号,发生时间
class Content(Base):
    __tablename__ = 'content'
    id = Column(Integer, primary_key=True)
    problem = Column(Text)
    cid = Column(Integer, ForeignKey('category.id'))
    uid = Column(Integer, ForeignKey('unit.id'))
    date = Column(Date)
    category = relationship('Category', back_populates='contents')
    unit = relationship('Unit', back_populates='contents')


# Base.metadata.create_all()
# session = Session()
# tmp_user = User(username='user3', password='1234')
# print(tmp_user)
# session.add(tmp_user)
# session.commit()

Flask-SQLAlchemy创建数据模型

# flask-sqlalchemy的基本使用
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()


# 管理员信息表
class Admin(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(50))

    def __init__(self, username, password):
        self.username = username
        self.password = password

    def __repr__(self):
        return "<Admin(id='%s',username='%s',password='%s')>" % (self.id, self.username, self.password)


# 用户信息表
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    # name字段,字符类型,最大的长度是50个字符
    username = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(50))

    def __init__(self, username, password):
        self.username = username
        self.password = password

    # 让打印出来的数据更好看,可选的
    def __repr__(self):
        return "<User(id='%s',username='%s',password='%s')>" % (self.id, self.username, self.password)


# 柱状图数据表
class DataBar(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    label = db.Column(db.Integer)
    data = db.Column(db.Integer)

    def __init__(self, label, data):
        self.label = label
        self.data = data

    def __repr__(self):
        return "<DataBar(id='%s',label='%s',data='%s')>" % (self.id, self.label, self.data)


# 线状图数据表
class DataLine(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    label = db.Column(db.Integer)
    data = db.Column(db.Integer)

    def __init__(self, label, data):
        self.label = label
        self.data = data

    def __repr__(self):
        return "<DataLine(id='%s',label='%s',data='%s')>" % (self.id, self.label, self.data)


# 单位名称映射表
class Unit(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    unitname = db.Column(db.String(50))
    contents = db.relationship('Content', back_populates='unit')

    def __init__(self, unitname):
        self.unitname = unitname

    def __repr__(self):
        return "<Unit(id='%s',unitname='%s')>" % (self.id, self.unitname)


# 问题一级分类映射表
class Category1(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    category = db.Column(db.String(50))
    contents = db.relationship('Content', back_populates='category1')
    category2s = db.relationship('Category2', back_populates='category1')

    def __init__(self, category):
        self.category = category

    def __repr__(self):
        return "<Unit(id='%s',category='%s')>" % (self.id, self.category)


# 问题二级分类映射表,细化分类
class Category2(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    category = db.Column(db.String(50))
    c1id = db.Column(db.Integer, db.ForeignKey('category1.id'))
    contents = db.relationship('Content', back_populates='category2')
    category1 = db.relationship('Category1', back_populates='category2s')

    def __init__(self, category, c1id):
        self.category = category
        self.c1id = c1id

    def __repr__(self):
        return "<Unit(id='%s',category='%s',c1id='%s)>" % (self.id, self.category, self.c1id)


# 情况登记表,问题,问题类型编号,单位编号,发生时间
class Content(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    problem = db.Column(db.Text)
    c1id = db.Column(db.Integer, db.ForeignKey('category1.id'))
    c2id = db.Column(db.Integer, db.ForeignKey('category2.id'))
    uid = db.Column(db.Integer, db.ForeignKey('unit.id'))
    date = db.Column(db.Date)
    modificationstate = db.Column(db.Boolean)
    modificationdate = db.Column(db.Date)
    category1 = db.relationship('Category1', back_populates='contents')
    category2 = db.relationship('Category2', back_populates='contents')
    unit = db.relationship('Unit', back_populates='contents')

    def __init__(self, problem, c1id, c2id, uid, date, modificationstate, modificationdate):
        self.problem = problem
        self.c1id = c1id
        self.c2id = c2id
        self.uid = uid
        self.date = date
        self.modificationstate = modificationstate
        self.modificationdate = modificationdate

    def __repr__(self):
        return "<Content(id='%s',problem='%s',c1id='%s',c2id='%s',uid='%s',date='%s'),modificationstate='%s',modificationdate='%s'>" \
               % (self.id, self.problem, self.c1id, self.c2id, self.uid, self.date, self.modificationstate, self.modificationdate)


# db.create_all()
# admin = Admin('admin', '123456')
# user = User('user', '123456')
# unit = Unit('单位一')
# db.session.add(admin)
# db.session.add(user)
# db.session.add(unit)
# db.session.commit()
相关文章
|
6月前
|
关系型数据库 API 数据库
盘点Flask与数据库的交互插件——Flask-Sqlalchemy
盘点Flask与数据库的交互插件——Flask-Sqlalchemy
94 0
|
6月前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
97 1
|
4月前
|
监控 前端开发 API
实战指南:使用Python Flask与WebSocket实现高效的前后端分离实时系统
【7月更文挑战第18天】构建实时Web应用,如聊天室,可借助Python的Flask和WebSocket。安装Flask及Flask-SocketIO库,创建Flask应用,处理WebSocket事件。前端模板通过Socket.IO库连接服务器,发送和接收消息。运行应用,实现实时通信。此示例展现了Flask结合WebSocket实现前后端实时交互的能力。
448 3
|
6月前
|
前端开发 安全 JavaScript
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
159 0
|
5月前
|
关系型数据库 MySQL 数据库
Flask使用SQLAlchemy添加悲观锁和乐观锁
什么是悲观锁和乐观锁? • 悲观锁:假设在访问数据时会发生冲突,因此在访问数据前,先锁住数据。在锁被释放之前,其他事务无法访问此数据。是属于数据库中的一种互斥锁机制 • 乐观锁:假设在访问数据时冲突较少,因此不会锁住数据,而是在提交更新时检查是否有冲突。如果检测到冲突,则放弃更新。但是乐观锁并非真正的数据库锁。
|
5月前
|
前端开发 JavaScript Python
flask实战-模板实现公共导航
在Flask中实现模板继承,创建基础模板`base.html`,包含公共导航菜单。子模板`movie-extends.html`继承`base.html`,并定义主要内容。视图函数`movie_extends_view`渲染`movie-extends.html`,显示电影列表。通过`extra_css`和`extra_js`块添加页面特定的样式和脚本,实现在`movie-extends.html`中应用自定义CSS样式。运行应用,访问http://127.0.0.1:1027/movie-extends,页面显示定制的电影列表样式。
86 2
|
5月前
|
SQL 数据库 开发者
Flask、SQLAlchemy
【6月更文挑战第5天】
42 3
|
5月前
|
JSON API 数据库
Flask 实战:实现增改及分页查询的完整 Demo
使用 Flask 搭建的 RESTful API Demo,包含增、改用户信息和分页查询功能。利用 Flask-SQLAlchemy 处理数据库操作。环境准备:安装 Flask 和 Flask-SQLAlchemy。核心代码展示用户模型、增加用户、分页查询和更新用户信息的路由。注意点包括数据库配置、错误处理、JSON 数据处理、幂等性、安全性和编码问题。提供完整源码下载链接。
504 2
|
5月前
|
API 数据库 数据库管理
Flask Web开发基础:数据库与ORM实战
该文介绍了如何使用 Flask、SQLAlchemy 和 SQLite 实现数据库操作。首先,通过创建虚拟环境和安装 flask-sqlalchemy(版本2.5.1)及 sqlalchemy(版本1.4.47)来设置环境。接着,配置数据库URI,定义User和Movie模型类表示数据库表,并通过db.create_all()创建表。文章还展示了如何插入、查询、更新和删除记录,强调了db.session.commit()在保存更改中的关键作用。查询涉及filter、order_by等方法,提供了一系列示例。
332 1
|
6月前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
133 1
Flask框架在Python面试中的应用与实战