在项目版本让运维部署时,涉及到数据库表的增加问题,想了一下,可以有四种方法

1.使用SQLAlchemy的db.create_all()方法

# -*- coding:utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import text HOST = '127.0.0.1'
USER = "root"
PASSWD = ""
DB = "carrier_test"
CHARTSET = "utf8" app = Flask(__name__,instance_relative_config = True)
#链接数据库路径
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://%s:%s@127.0.0.1:3306/%s?charset=%s' %(USER,PASSWD,DB,CHARTSET)
#如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#如果设置成 True,SQLAlchemy 将会记录所有 发到标准输出(stderr)的语句,这对调试很有帮助。
app.config['SQLALCHEMY_ECHO'] = False
# 数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。
app.config['SQLALCHEMY_POOL_SIZE'] = 6
db = SQLAlchemy(app) class Table_one(db.Model):
__tablename__ = 'table_one' id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)
com_name = db.Column('com_name', db.String(30), nullable=False)
com_about = db.Column('com_about', db.String(200), nullable=False) def __repr__(self):
return '<table_one com_name %r>' % self.com_name
if __name__=='__main__':#创建表
db.create_all()

如果在windows执行过程中报错  ModuleNotFoundError: No module named 'MySQLdb'     ,安装    pip install mysqlclient   解决问题。

相关网址: https://www.cnblogs.com/guohaojintian/p/6030818.html

2.使用MySQLdb进行新增表

import MySQLdb

HOST = '127.0.0.1'
USER = "root"
PASSWD = ""
DB = "carrier"
CHARTSET = "utf8" db=MySQLdb.connect(HOST,USER,PASSWD,DB)
cursor=db.cursor() if __name__ == '__main__': if cursor:
command_a = """CREATE TABLE `tea2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL,
`na_medf` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;"""
cursor.execute(command_a)
db.commit()
db.close()

3.使用Flask-Migrate扩展迁移数据库

安装相关插件
$ pip install Flask-Migrate

文件名:migrate_create_table.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand #初始化app
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@127.0.0.1:3306/carrier?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app)
#初始化migrate相关
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand) class Tea(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
na_medf = db.Column(db.String(128)) if __name__ == '__main__':
manager.run()

代码写好之后,运行此文件,配合相关命令进行数据库更新

first:通过init命令来创建一个迁移库,执行后会在文件同级目录创建一个migrations文件夹,里面存放了所有迁移脚本。

注意点: 如果需要重新执行此命令,需要删除migrations文件夹,否则报文件夹已经存在错误   alembic.util.exc.CommandError: Directory migrations already exists

python migrate_create_table.py db init

secound:通过migrate命令创建自动迁移脚本,此时会在数据库增加一张表(alembic_version),记录migrate更新的版本号

python migrate_create_table.py db migrate

third:通过 upgrade命令更新到数据库中

python migrate_create_table.py db upgrade

这时候打开数据库,便可看到新增的表,以及alembic_version表中新增的版本号

注意点:1.在以后数据库迁移更新中,不再需要初始化,所以跳过init命令

2.以上命令是在linux命令窗口中,在pycharm代码编辑软件中为

I.点击 Edit Configurations   

II.输入 db  **** 等命令   

 4.直接使用sql语句

类似于第二种,区别在于运维部署多了一个步骤

此四种方法,推荐使用第二种进行新增表,第三种更利于数据库结构的回滚(使用 downgrade命令)。

python开发部署时新增数据库中表的方法的更多相关文章

  1. python开发_python操作mysql数据库

    如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装 本篇blog是有关python操作mysql数据的相关内容. 我做了一个demo: 先看运行效果: mys ...

  2. Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件

    [前面的话] 身体慢慢已经快好了,感觉真好,哈哈. 这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件.基础文章,选择性阅读. [步骤] 1. ...

  3. Python小练习_将数据库中表数据存到redis里

    # ##练习:将xxx数据库中my_user表中数据存到redis里面# 分析: pymysql.json.redis# 1.连接数据库,查到数据库里面所有的数据,游标类型要用pymysql.curs ...

  4. jeesite3环境部署时初始化数据库注意问题

    ---恢复内容开始--- 首先要修改jeesite.properties下数据库连接方式,注意选择自己的数据库 其次在pom.xml文件中修改对应的数据库连接方式 最后运行db文件夹下的init-db ...

  5. Android开发JDBC连接mysql数据库导入驱动方法

    在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java ...

  6. ThinkPHP开发api时多级控制器的访问方法

    发开api时,经常会用到thinkphp的多级控制器,访问方法如下: 例如:有v1和v2两个版本的接口 v1:版本控制器(类文件位置为:application/api/controller/v1/Us ...

  7. Python 开发基础-字符串类型讲解(字符串方法)-2

    s = 'Hello World!'print(s.index('W',0,9))#返回某个字母的索引值,本例返回6.没有该字母会报错,和FIND比较像,find不会报错,没找到会返回-1print( ...

  8. Python 开发基础-字符串类型讲解(字符串方法)-1

    s = 'Hello World!' print(s.capitalize()) #第一个字母大写,其余小写# 输出:Hello world!print(s.swapcase())#大写变小写,小写变 ...

  9. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

随机推荐

  1. Ajax 异步上传文件

    需要引用js jquery.form 前端代码 <form action="/Save" id="mainForm" method="post& ...

  2. spring boot 入门操作(二)

    spring boot入门操作 使用FastJson解析json数据 pom dependencies里添加fastjson依赖 <dependency> <groupId>c ...

  3. react-router 参数获取

    No BB!!! show me the code. Main.js import { BrowserRouter, Route, Link ,Switch} from 'react-router-d ...

  4. ANDROID 开发,安装离线安装包的下载地址及安装方法。

    前言: 建议采用离线安装的方法安装SDK包,在线的方式实在是.....多了不解释. 下面说一下离线安装的方法: 1.下载地址:http://pan.baidu.com/s/1sjuJwYD#path= ...

  5. post和get方式区别

    Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.1. get是把参数数据队列加到提交表单的ACTI ...

  6. CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制

    第2课  CC2530的通用I/O端口输入和输出控制 广东职业技术学院  欧浩源 一.CC2530的引脚概述 CC2530微控制器采用QFN40封装,有40 个引脚.其中,有21个数字I/O端口,其中 ...

  7. Jquery Ajax 保存

    Jquery Ajax 保存: $.ajax({ type: "POST", async:false, url: "${ctx}/url", data: {pI ...

  8. java 抛出异常

    这种方式serviceImpl 方法不用throws异常,比较方便 if(count>0){ //或者 IllegalArgumentException java的 throw new Ille ...

  9. 警惕System.Environment.CurrentDirectory 获取当前目录

    最近工作中,要做个客户端提醒的小工具:winform程序自然少不了要读取和应用程序同一个目录的配置文件(不是exe.config文件): 要读取当前应用程序所在目录我立马想到了System.Envir ...

  10. 使用javac编译zookeeper项目

    这里记录zookeeper编译源代码上的一些细节的问题. 网上不少关于如何使用ant eclipse来构建zookeeper对应的eclipse工程的记录.这里就不再过多赘述.只做简单阐述. 这里主要 ...