flask项目结构(四)使用sqlalchemy和alembic

简介

其实我不是啥正经人,错了,不是啥正经程序员,所能想到的估计也就码农一级吧,高级程序员,搞什么算法,什么人工智能,大数据计算…………离我还太遥远。

但是这并不妨碍我继续学习,继续写垃圾小程序。

反正我做的小程序,也就是把人从重复的劳动中解脱出来。用电脑代替人脑记忆那些枯燥的繁琐的数据。用电脑来查询记忆的数据。人脑的神经网络是比计算机查找的快。随便吧,还搞不到那个层次。先用电脑记录查询吧。

虽然python学习中已经学习了读写文件,在文件中查找,不过那都面向少量数据,更别提什么大数据了。几万行数据,你试试,搞起来累死了。新武器,数据库。

数据库:

抄吧
本词条由“科普中国”百科科学词条编写与应用工作项目 审核 。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。

就是存数据,查数据,改数据…………的工具集合。

ORM:

继续抄

对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

也就是不用你管数据库怎么样操作,怎么处理了,把数据库变成了你程序当中的对象,你就像操作对象一样来操作数据库。降低了程序员的学习成本,你不需要额外再去学数据库了。简单学习一下数据库对象的操作就可以使用数据库了。

sqlalchemy:

还得抄

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。

SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchmey采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。

python中最出名的,最好用的,最…………反正python中,涉及数据库的,我都用它了。

alembic:

不抄我怎么解释

通常我们会将我们的代码放入到某个VCS(版本控制系统)中,进行可追溯的版本管理。一个项目除了代码,通常还会有一个数据库,这个数据库可能会随着项目的演进发生变化,甚至需要可以回滚到过去的某个状态,于是一些工具将数据库的版本化也纳入了管理。

Alembic 是 Sqlalchemy 的作者实现的一个数据库版本化管理工具,它可以对基于Sqlalchemy的Model与数据库之间的历史关系进行版本化的维护。

随着软件的开发,功能的增加,方向的调整,数据库的结构也会跟着变化,那么数据库结构怎么管理呢?手动管理,实在不是程序员的办法,alembic就是为了自动化处理数据库结构的工具。会随着程序中对数据库对象的定义,半自动的修改你的数据库结构。

一:安装依赖

在python项目的虚拟环境中安装sqlalchemy  alembic 和 MySQL-connector-python

二:创建数据库连接

在项目根目录增加文件config.py,项目配置文件。

本例只写入了数据库配置。以后cookie,session,加密的盐,都写这里吧。

config.py

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine(‘mysql+mysqlconnector://plan:[email protected]/plan‘, convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()

这个配置文件使用了MySQL-connector-python库连接第一篇文章写的mariadb数据库。

连接参数是‘mysql+mysqlconnector://plan:[email protected]/plan‘

三:创建models

在项目根目录创建目录models,并在其中创建models.py文件。

models目录是模型主目录,公共部分模型,都放这里。

models.py就是模型了。

在app/app01目录下创建app01_models.py,app01的私有models,就定义在这里了。

结构如下:

.
├── app
│   ├── alembic.ini
│   ├── app
│   │   ├── app01
│   │   │   ├── app01_models.py     #新加,app01的私有models
│   │   │   └── views.py
│   │   ├── app02
│   │   │   └── views.py
│   │   └── main
│   │       └── views.py
│   ├── build_requirements.py
│   ├── config.py
│   ├── main.py
│   ├── migrate
│   │   ├── env.py
│   │   ├── README
│   │   ├── script.py.mako
│   │   └── versions
│   ├── models                     #新加目录
│   │   └── models.py            #公共models
│   └── requirements.txt
├── dockerfile
├── list.txt
└── rebuild.sh

/models/models.py

from config import Base
from sqlalchemy import Column, Integer, String

class User(Base):
    __tablename__ = ‘public‘
    id = Column(Integer, primary_key=True)
    public_name = Column(String(50))
    public_email = Column(String(120))

    def __init__(self, name=None, email=None):
        self.public_name = name
        self.public_email = email

    def __repr__(self):
        return ‘<User %r>‘ % (self.public_name)

/app/app01/app01_models.py

from config import Base
from sqlalchemy import Column, Integer, String

class app01(Base):
    __tablename__ = ‘private‘
    id = Column(Integer, primary_key=True)
    private_name = Column(String(50))
    private_email = Column(String(120))

    def __init__(self, name=None, email=None):
        self.private_name = name
        self.private_email = email

    def __repr__(self):
        return ‘<User %r>‘ % (self.private_name)

四:创建alembic扩展工具

在pycharm中用扩展工具来构建alembic的3条命令。

alembic init migrate                           创建alembic目录结构

alembic revision --autogenerate       生成alembic升级脚本

alembic upgrade head                     升级数据库结构到最新版

Program:$PyInterpreterDirectory$\alembic.exe这行比较长,抓图看不清

五:创建alembic目录结构

用刚才配置的扩展工具执行 init也可以。

直接执行命令  alembic init migrate 也可以。

会在项目目录下生成一个目录  migrage  一个配置文件 alembic.ini

生成结果如下:

.
├── app
│   ├── alembic.ini      #自动增加文件,需配置
│   ├── app
│   │   ├── app01
│   │   │   ├── app01_models.py
│   │   │   └── views.py
│   │   ├── app02
│   │   │   └── views.py
│   │   └── main
│   │       └── views.py
│   ├── build_requirements.py
│   ├── config.py
│   ├── main.py
│   ├── migrate         #自动增加目录
│   │   ├── env.py      #需修改
│   │   ├── README
│   │   ├── script.py.mako
│   │   └── versions
│   └── requirements.txt
├── dockerfile
├── list.txt
└── rebuild.sh

六:配置alembic

七:

八:

九:

十:

原文地址:https://www.cnblogs.com/jackadam/p/8684633.html

时间: 2024-10-11 03:00:08

flask项目结构(四)使用sqlalchemy和alembic的相关文章

flask项目结构(一)mariadb

简介: 本文主要是根据自己所学,创建一个flask项目,使用sqlalchemy,alembic,mariadb,bootstrap,APScheduler,selenium,request…………技术,创建及部署在docker中. 应该是会维护在github,作为以后写flask项目的蓝本程序. 一:安装maradb. 1.在windows中运行mariadb. http://www.haosql.com/,推荐这里下载一个绿色版的mariadb. HaoSQL,好用的SQL. 本程序的目的只

flask项目结构

项目结构 -app - static文件夹 - templates文件夹 - views文件夹 - 蓝图的视图 user - __init__.py(from .user import user_bp 注册蓝图,使用懒加载,init_view(app)) - __init__.py, create_app() init_view(app) -manager.py(flask-script) app=create_app() manager = Manager(app) 原文地址:https://

flask项目结构(五)使用数据库

简介: 基础搭建好了,开始读写数据库吧.毕竟写的程序,也没什么高深的,就是CRUD,中文说是增删改查. 一:在数据库中增加测试数据. 在项目根目录建立init_test.py from config import Base,db_session from models.models import * from app.app01.app01_models import * add_public=public( name='jack_public', email='[email protected

flask项目结构(六)快速开发后台flask-admin

简介: Flask-admin 相当django的xadmin吧! 快速装配一个后台用来管理数据. Flask-admin也是有使用局限性的,他只适合开发小型快速的应用,不适合那种大型并发性高,逻辑复杂的应用.首先,对于大型应用都是前后端分离的,加快访问速度,而且后端装配,尤其是这种动态生成页面的速度更慢. 需要安装Flask-Admin,Flask-BabelEx, 一:导入admin 1.导入 from flask import Flask from app.main.views impor

【Flask】 项目结构说明

项目结构 Flask的一大优势就是其极其轻量化.但是也需要注意到,如果我们要用Flask做一个大项目的话,把所有代码写在一个文件里肯定是不合适的.非常难以维护.但是和Django这种框架又不一样,Flask并没有规定项目一定要遵从某种必须遵守的目录结构.最终,人们在长期的实践中得到一些比较好用因此约定俗成的目录结构. 一个典型的flask项目的目录结构是这样的(再次明确,不是强制的,而是约定俗成的一种结构): 这种结构有四个顶级文件夹,主体的程序代码都放在app包中:migrations文件夹中

flask开发restful api系列(7)-蓝图与项目结构

如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而对整个项目来说,总要有后台管理系统吧,总要有web管理吧,但这些东西不能全部放到view.py.不单单是这样,如果你是一个经验丰富的程序员,你应该知道,一个程序最好只有一个入口点,从这个入口点进去,全是单向的,就像一棵树一样,入口点就在树根,然后蔓延到树干,树枝.树枝和树枝之间最好不要太多交集,也就

二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法

回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan.baidu.com/s/1o6MAKCa       前言:前面几章讲解了开发一个Web系统的完整目录结构与界面开发框架JqueryEasyUI,接下来几章讲解开发Winform系统的完整目录结构与界面开发的相关控件.开发Winform系统又分为两种类型,C/S模式和C/S/S模式:其中C/S/S模式的中间

Flask 教程 第四章:数据库

本文翻译自 The Flask Mega-Tutorial Part IV: Database 在Flask Mega-Tutorial系列的第四部分,我将告诉你如何使用数据库. 本章的主题是重中之重!大多数应用都需要持久化存储数据,并高效地执行的增删查改的操作,数据库为此而生. 本章的GitHub链接为: Browse, Zip, Diff. Flask中的数据库 Flask本身不支持数据库,相信你已经听说过了. 正如表单那样,这也是Flask有意为之.对使用的数据库插件自由选择,岂不是比被迫

Flask ==&gt; 目录结构

Flask ==>   目录结构 一:目标 1.要求: 1. 熟悉Flask的目录结构. 2. 了解应用,装上新的组件往里面放,改怎么弄? 2.作业: 1.基于flask实现权限管理 2.笔记: -  flask的请求周期 二:目录结构内容 知识点: 1.  从全局上了解flask项目的目录结构 2. flask项目的运行机制 3.flask框架实现MVC架构 4.flask-sqlalchemy  操作mysql数据库 流程步骤: 1.新建项目:blog系统 完成后的目录结构是这样的:非常简单