博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python开发部署时新增数据库中表的方法
阅读量:6823 次
发布时间:2019-06-26

本文共 3334 字,大约阅读时间需要 11 分钟。

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

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

# -*- coding:utf-8 -*-from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom sqlalchemy.sql import textHOST = '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'] = 6db = 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 '
' % self.com_nameif __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 MySQLdbHOST = '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 Flaskfrom flask_sqlalchemy import SQLAlchemyfrom flask_script import Managerfrom flask_migrate import Migrate, MigrateCommand#初始化appapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@127.0.0.1:3306/carrier?charset=utf8'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Truedb = 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命令)。

 

转载于:https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_383days.html

你可能感兴趣的文章
玩转日志第一步,通过fluentd转存nginx日志
查看>>
awk 应用
查看>>
网站常见漏洞 -- 文件上传漏洞
查看>>
Struts2学习(六):访问隐藏的request和session
查看>>
结合项目实例 回顾传统设计模式(四)工厂模式(简单工厂、普通工厂、抽象工厂)...
查看>>
我了解的西安软件外包业务
查看>>
第57期:LPWAN技术之超窄带(UNB)浅析
查看>>
Frankfan7你问我答之一
查看>>
Windows XP启用ADMIN$默认管理共享
查看>>
RDIFramework.NET V2.9版本多语言的实现
查看>>
新内核的编译安装
查看>>
Azure实例级公共IP
查看>>
停电,导致DC无法启动
查看>>
MariaDB七之双主复制
查看>>
Sencha touch实践(1)在ios,android上变web app为native app
查看>>
XNA游戏:重力感应
查看>>
DNS服务部署的那点事儿
查看>>
【云计算的1024种玩法】使用 MSMTP 实现底层环境的 阿里云·邮件推送服务 兼容...
查看>>
Varnish介绍,安装与配置详解。
查看>>
CentOS bash漏洞威胁恐比“心脏流血”更大
查看>>