Flask使用SQLAlchemy两种方式
一、SQLAlchemy和Alembic
主要使用原生的SQLAlchemy进行数据库操作和使用Alemic进行数据库版本控制
I 创建数据库主要有三个步骤
创建表的父类/数据库连接/Session
from sqlalchemy import Column, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker BaseModel = declarative_base()
engine = create_engine('mysql+mysqlconnector://root:password@localhost:3306/test')
DBSession = sessionmaker(bind=engine)
初始化每个表的class定义
class UserBaseModel():
__tablename__ = 'user_elabels'
id = Column(Integer, privatemary_key=True)
email = Column(String(25), index = True, nullable=False)
md5_pwd = Column(String(128), nullable=False) @property
def password(self):
raise AttributeError('password cat not be read') @password.setter
def password(self, pwd):
m2 = hashlib.md5()
m2.update(pwd)
self.md5_pwd = m2.hexdigest() def verify_password(self, in_pwd):
m2 = hashlib.md5()
m2.update(in_pwd)
return self.md5_pwd == m2.hexdigest()创建表以及使用 sqlalchemy可以通过寻找BaseModel的所有子类完成表的创建
BaseModel.metadata.create_all(engine)
# 创建session对象:
session = DBSession()
# 创建新User对象:
new_user = User(...)
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()
参考资料:
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0014021031294178f993c85204e4d1b81ab032070641ce5000
http://docs.sqlalchemy.org/en/latest/orm/tutorial.html
II 使用Alembic进行数据库版本管理
- pip install alembic
修改alembic.ini
改:
sqlalchemy.url = ...
为
sqlalchemy.url = mysql://account:password@127.0.0.1/model_test修改alembic/env.py
import sys
from os.path import abspath, dirname
sys.path.append(dirname(dirname(abspath(__file__))))
from models import BaseModel
target_metadata = BaseModel.metadata自动创建版本
alembic revision --autogenerate -m "initdb"
###这时候会在数据库中看到所有的表已经创建 #其他命令: #更新数据库:
alembic upgrade 版本号
#更新到最新版:
alembic upgrade head
#降级:
alembic downgrade 版本号
#降级到最初版本:
alembic downgrade head
流程说明:
当我们第一次执行alembic revision --autogenerate -m "XXX"命令的时候,就会自动在数据库中创建表,此时alembic/versions/versionnumXXX.py中的upgrade()和downgrade()函数都为空。
数据库表模型发生变动时候,执行 alembic revision --autogenerate -m "XXX" 时候,就会在alembic/versions中自动生成一个versionnoXXX.py 的文件中的upgrade()函数和downgrade()自动生成迁移脚本,此时执行
```
alembic upgrade 版本号 或者 alemibc upgrade +1
```
就会执行最新生成的versionnoXXX.py中的文件。 所以,也可以手工直接在alembic/versions下的文件中写Python代码执行升级,不过要注意版本号。
参考资料: http://alembic.zzzcomputing.com/en/latest/tutorial.html#the-migration-environment https://segmentfault.com/a/1190000006949536
二、使用Flask插件
主要基于flask-sqlalchemy, flask-migrate(封装了alembic), flask-script
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
basedir = os.path.abspath(os.path.dirname(file)) app = Flask(name) app.config['SQLALCHEMYDATABASEURI'] = \ 'sqlite:///' + os.path.join(basedir, 'data.sqlite') app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app) manager = Manager(app) migrate = Migrate(app, db) manager.add_command('db', MigrateCommand)
其中flask-sqlalchemy封装了sqlalchemy,不用导入sqlalchemy的一些类和函数,比如在上面的例子中可以通过db.Column, db.relationship直接调用而不用再次导入
flask-alembic封装了alemibc,可以不用手工配置alembic.ini 和 alemibc/env.py 常用命令:
创建迁移仓库:
python main.py db init 生成迁移脚本:
python main.py db migrate -m "initial migration" 执行迁移脚本:
python main.py db upgrade
参考资料: 基于python的web应用开发实战
Flask使用SQLAlchemy两种方式的更多相关文章
- flask操作mongo两种方式--ORM
#manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...
- flask操作mongo两种方式--常规
#manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...
- flask 操作mysql的两种方式-sqlalchemy操作
flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...
- flask 操作mysql的两种方式-sql操作
flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ...
- Python与数据库 sqlalchemy 建立声明层表对象的两种方式
在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 1 from sqlalchemy.sql.schema import Table, ...
- Flask实战-留言板-使用Flask-DebugToolbar调试程序、Flask配置的两种组织形式
使用Flask-DebugToolbar调试程序 扩展Flask-DebugToolbar提供了一系列调试功能,可以用来查看请求的SQL语句.配置选项.资源加载情况等信息.这些信息在开发时会非常有用. ...
- Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式
建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...
- flask框架(二)——flask4剑客、flask配置文件的4种方式
之前学习的Django有必备三板斧:render,HttpResponse,redirect,JsonResponse 在flask也有,但是有些不同 一.Flask4剑客 1.直接返回字符串(ret ...
- Struts2实现ajax的两种方式
基于Struts2框架下实现Ajax有两种方式,第一种是原声的方式,另外一种是struts2自带的一个插件. js部分调用方式是一样的: JS代码: function testAjax() { var ...
随机推荐
- Freemarker list 的简单使用
freemarker list (长度,遍历,下标,嵌套,排序) 1. freemarker获取list的size : Java ArrayList<String> list = new ...
- linux查看操作系统的版本
内核信息 uname -a localhost.localdomain:所在主机的主机名,与主机配置文件/etc/hosts内容一致 2.4.20-8#1:内核版本号 Thu Mar 13 17:18 ...
- 不断更新的 ToDo-List
有些事情要明着写出来才会去干. 这里是一个不断更新的 ToDo-List,大致按照重要度和列出时间排序,已经完成的会画上删除线. 主要着眼短期计划,其中的大部分事务应该在一周内解决,争取不做一只鸽子. ...
- LOJ 3093: 洛谷 P5323: 「BJOI2019」光线
题目传送门:LOJ #3093. 题意简述: 有 \(n\) 面玻璃,第 \(i\) 面的透光率为 \(a\),反射率为 \(b\). 问把这 \(n\) 面玻璃按顺序叠在一起后,\(n\) 层玻璃的 ...
- MongoDB的增删查改基本操作
MongoDB的增删查改基本操作 先决条件建库.建集合.建文档 连接mongo,如果连接不上什么连接拒绝,输入mongod命令,启动服务后 输入mongo show dbs 显示当前的所有的数据库 一 ...
- Cython的简单使用
Cython是一个快速生成Python扩展模块的工具,从语法层面上来讲是Python语法和C语言语法的混血,当Python性能遇到瓶颈时,Cython直接将C的原生速度植入Python程序,这样使Py ...
- 【vim】自动补全 Ctrl+n
Vim 默认有自动补全的功能.的确这个功能是很基本的,并且可以通过插件来增强,但它也很有帮助.方法很简单. Vim 尝试通过已经输入的单词来预测单词的结尾. 比如当你在同一个文件中第二次输入 &quo ...
- [转]SPI通信原理简介
[转自]http://www.cnblogs.com/deng-tao/p/6004280.html 1.前言 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 ...
- mysql系列八、mysql数据库优化、慢查询优化、执行计划分析
mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. 一.介绍 对mysql优化是一个综合性的技术,主要包括 表的设计合理化(符合3NF) 添加适当索引( ...
- window系统下远程部署Tomcat
远程访问windows系统,在windows系统上启动tomcat,发布项目.1.拨VPN2.远程桌面连接,cmd --> mstsc 回车,弹出远程桌面连接窗口 3.输入计算机IP:132.2 ...