flask(十)使用alembic,进行数据库结构管理,升级,加表,加项
1.安装扩展,在虚拟环境中安装 alembic,不懂可以去看pycharm的系列文章。
2.初始化, 使用 Alembic 前需要通过 alembic init 命令创建一个 alembic 项目,该命令创建一个 alembic.ini 配置文件和一个 alembic 档案目录(YOUR_ALEMBIC_DIR)。
一般命令是 alembic init migrate
我这windows环境,又不想设置那么多环境变量,用pycharm,
参考以下配置:
File--Settings--tools--External Tools
用右边的加号自己创建一个新的。
Name是你会在菜单里看到的。如果想用下划线,多给几个吧,一个下划线,看不清楚
Program:是alembic的位置,这个是我的虚拟环境中alembic的位置。
Parameters:就是可选的命令参数了。
Working directory:就是执行这个命令的位置。
Group:你可以为你的这个项目起个名字,作为一个组存在你的菜单。有时候写多个项目,运行错可不好。
这是刚才设置的效果
试着运行一下吧。
会在项目文件夹下生成migrate目录和alembic.ini文件
3.配置:
修改alembic.ini,配置数据库连接。
注释掉原来的,写上我们自己的。路径以项目路径为开始,也就是我们设置的工作目录
;sqlalchemy.url = driver://user:pass@localhost/dbname
sqlalchemy.url =sqlite:///Plan.db
配置migrate/env.py,配置数据模型。
# target_metadata = None
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../")
from config.DBconfig import Base
target_metadata = Base.metadata
找到自己的路径,然后引入sqlalchemy 的Base
如果有多个models
...
from models import page, tag
target_metadata = [page.Base.metadata, tag.Base.metadata]
...
4.生成升级数据库的脚本文件
alembic revision --autogenerate
5.执行升级
alembic upgrade head
声成脚本和执行升级都可以按init命令写进pycharm的扩展。
暂时使用的是sqlite3 不支持DROP命令,但是改名的时候,自动化命令是这样的:
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('carriage', sa.Column('last_A66', sa.DateTime(), nullable=True))
op.drop_column('carriage', 'last_A6')
# ### end Alembic commands ### def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('carriage', sa.Column('last_A6', sa.DATETIME(), nullable=True))
op.drop_column('carriage', 'last_A66')
# ### end Alembic commands ###
alembic 是删除一条,再键一条,暂时也不研究了。
记得不要删除和更名,增加条目就一切正常。
弃用条目就好了。
flask(十)使用alembic,进行数据库结构管理,升级,加表,加项的更多相关文章
- 用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Alembic 查看指令 manager db 的可用选项 ...
- 在Rainbond中实现数据库结构自动化升级
Rainbond 这款产品一直致力于打通企业应用交付的全流程,这个流程中不可或缺的一环是企业应用的不断升级.迭代.Rainbond 特有的能力,是可以将囊括多个服务组件的企业应用系统进行打包,并执行一 ...
- 数据库服务概述,构建MYSQL服务器,数据库基本管理,mysql数据类型,表结构的调整
数据库的发展前引 MySQL的起源与发展过程 最为著名.应用最广泛的开源数据库软件 最早 ...
- [转]oracle学习入门系列之五内存结构、数据库结构、进程
原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...
- Oracle数据库结构
之前写了一篇文章<Oracle-知识结构漫谈> 粗略的介绍了Oracle数据库接口,在这里再更加详细的描述一下,当做是对原有知识的巩固,温故知新. Oracle体系结构数据库的体系结构是从 ...
- Spring中的数据库事物管理
Spring中的数据库事物管理 只要给方法加一个@Transactional注解就可以了 例如:
- 用 Flask 来写个轻博客 (20) — 实现注册表单与应用 reCAPTCHA 来实现验证码
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 reCAPTCHA 应用 reCAPTCHA 前文列表 用 Flask ...
- 三十.数据库服务概述 构建MySQL服务器 、 数据库基本管理 MySQL数据类型
mysql50:192.168.4.50 1.构建MySQL服务器 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认MySQL服务程序运行.root可控 ...
- Database基础(一):构建MySQL服务器、 数据库基本管理 、MySQL 数据类型、表结构的调整
一.构建MySQL服务器 目标: 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...
随机推荐
- Python3基础 dict items 以元组的形式打印出字典的每一个项
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- luogu4473 BZOJ2143 2011[国家集训队]飞飞侠
题目戳这里 有问题可以在博客@ 应该还会有人来看吧,嘻嘻 正题: 题目大意: 题目很清楚,就是一个点有一定的范围,会有一定的花费 求三个点中的任意两个点到另一个点的最小花费 (麻麻教育我千万读好题目( ...
- BZOJ5142: [Usaco2017 Dec]Haybale Feast 线段树或二分答案
Description Farmer John is preparing a delicious meal for his cows! In his barn, he has NN haybales ...
- Hive创建内部表、外部表
使用hive需要hive环境 启动Hive 进入HIVE_HOME/bin,启动hive ./hive 内部表 建表 hive> create table fz > (id int,nam ...
- UVa 821 网页跳跃(Floyd)
https://vjudge.net/problem/UVA-821 题意:给出一个有向图,任意两点都可相互到达,求任意两点的最短距离的平均值. 思路:求两点的最短距离,用Floyd算法很方便,最后加 ...
- testlogin
!/usr/bin/env python coding:utf-8 import requests import unittest import json,urllib class testlogin ...
- MVC ---- EF的安装于卸载
先卸载EF:Uninstall-Package EntityFramework -Force 在安装EF5.0:Install-Package EntityFramework –Version 5.0 ...
- Linux——进程管理简单学习笔记(二)
计划任务: 为什么要设置计划任务 : 实现数据库备份,发送系统通知神马的..... 计划任务的命令: 一: at : 安排作业在某一时刻执行一次 nbatch 安排作业在系统负载不重时执 行一 ...
- Linux——系统引导流程学习简单笔记
开启电源: 固件 firmware(CMOS/BIOS) → POST 加电自检 对硬件就行检查 ↓ 自举程序 BootLoader(GRUB) → 载入内核 ↓ 载入内核 Kernel 1:驱动硬件 ...
- input 输入框只能输入纯数字
1.onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是在中文输入法状态下,输入汉字之后直接回 ...