码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-04-01 00:02:47      阅读:519      评论:0      收藏:0      [点我收藏+]

标签:ret   面向对象编程   高效   tab   海量数据   import   oge   hiberna   直接   

简介

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

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

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

虽然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:plan@mysql/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:plan@mysql/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

七:

八:

九:

十:

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

标签:ret   面向对象编程   高效   tab   海量数据   import   oge   hiberna   直接   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!