前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python开发部署时新增数据库中表的方法

python开发部署时新增数据库中表的方法

作者头像
用户1558882
发布2019-01-30 17:01:03
8510
发布2019-01-30 17:01:03
举报
文章被收录于专栏:RgcRgc

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

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

代码语言:javascript
复制
# -*- 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进行新增表

代码语言:javascript
复制
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扩展迁移数据库

安装相关插件

代码语言:javascript
复制
$ pip install Flask-Migrate

文件名:migrate_create_table.py

代码语言:javascript
复制
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

代码语言:javascript
复制
python migrate_create_table.py db init

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

代码语言:javascript
复制
python migrate_create_table.py db migrate

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

代码语言:javascript
复制
python migrate_create_table.py db upgrade

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

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

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

                       I.点击 Edit Configurations   

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

 4.直接使用sql语句

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档