简介
其实我不是啥正经人,错了,不是啥正经程序员,所能想到的估计也就码农一级吧,高级程序员,搞什么算法,什么人工智能,大数据计算…………离我还太遥远。
但是这并不妨碍我继续学习,继续写垃圾小程序。
反正我做的小程序,也就是把人从重复的劳动中解脱出来。用电脑代替人脑记忆那些枯燥的繁琐的数据。用电脑来查询记忆的数据。人脑的神经网络是比计算机查找的快。随便吧,还搞不到那个层次。先用电脑记录查询吧。
虽然python学习中已经学习了读写文件,在文件中查找,不过那都面向少量数据,更别提什么大数据了。几万行数据,你试试,搞起来累死了。新武器,数据库。
数据库:
抄吧
本词条由“科普中国”百科科学词条编写与应用工作项目 审核 。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
就是存数据,查数据,改数据…………的工具集合。
ORM:
继续抄
对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
也就是不用你管数据库怎么样操作,怎么处理了,把数据库变成了你程序当中的对象,你就像操作对象一样来操作数据库。降低了程序员的学习成本,你不需要额外再去学数据库了。简单学习一下数据库对象的操作就可以使用数据库了。
sqlalchemy:
还得抄
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