python开发部署时新增数据库中表的方法
在项目版本让运维部署时,涉及到数据库表的增加问题,想了一下,可以有四种方法
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开发部署时新增数据库中表的方法的更多相关文章
- python开发_python操作mysql数据库
如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装 本篇blog是有关python操作mysql数据的相关内容. 我做了一个demo: 先看运行效果: mys ...
- Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件
[前面的话] 身体慢慢已经快好了,感觉真好,哈哈. 这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件.基础文章,选择性阅读. [步骤] 1. ...
- Python小练习_将数据库中表数据存到redis里
# ##练习:将xxx数据库中my_user表中数据存到redis里面# 分析: pymysql.json.redis# 1.连接数据库,查到数据库里面所有的数据,游标类型要用pymysql.curs ...
- jeesite3环境部署时初始化数据库注意问题
---恢复内容开始--- 首先要修改jeesite.properties下数据库连接方式,注意选择自己的数据库 其次在pom.xml文件中修改对应的数据库连接方式 最后运行db文件夹下的init-db ...
- Android开发JDBC连接mysql数据库导入驱动方法
在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java ...
- ThinkPHP开发api时多级控制器的访问方法
发开api时,经常会用到thinkphp的多级控制器,访问方法如下: 例如:有v1和v2两个版本的接口 v1:版本控制器(类文件位置为:application/api/controller/v1/Us ...
- Python 开发基础-字符串类型讲解(字符串方法)-2
s = 'Hello World!'print(s.index('W',0,9))#返回某个字母的索引值,本例返回6.没有该字母会报错,和FIND比较像,find不会报错,没找到会返回-1print( ...
- Python 开发基础-字符串类型讲解(字符串方法)-1
s = 'Hello World!' print(s.capitalize()) #第一个字母大写,其余小写# 输出:Hello world!print(s.swapcase())#大写变小写,小写变 ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
随机推荐
- .Net Core 图片文件上传下载
当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...
- solr5Ik分词2
<!--IK分词器--><fieldType name="text_ik" class="solr.TextField"><ana ...
- ionic2 跳转子页面隐藏底部导航栏
第一种方法: 在tab里面添加一个属性[tabsHideOnSubPages]='true' <ion-tab [root]="tab1Root" [tabsHideOnSu ...
- C#中==运算符
在这篇博客中,我们将介绍如下内容: ==运算符与基元类型 ==运算符与引用类型 ==运算符与String类型 ==运算符与值类型 ==运算符与泛型 ==运算符与基元类型 我们分别用两种方式比较两个整数 ...
- Swift json字典转模型 项目记录
背景 最近项目开始转用Swift3开发,由于Swift中json(字典)转模型的选择方案较多,笔者最开始选择了HandyJSON的方案,在使用一段时间后发现当要进行某个字段取值使用时需要进行各种的转化 ...
- URL重定向
/** * URL重定向 * @param string $url 重定向的URL地址 * @param integer $time 重定向的等待时间(秒) * @param string $msg ...
- [leetcode-556-Next Greater Element III]
Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...
- PHP基础入门(五)---PHP面向对象
前言: 今天来和大家介绍一下PHP的面向对象.说到面向对象,我不得不提一下面向过程,因为本人在初学时,常常分不清楚. 那么面向对象和面向过程有什么区别呢?下面给大家简单介绍一下: 面向对象专注于由哪个 ...
- python实现希尔排序(已编程实现)
希尔排序: 观察一下”插入排序“:其实不难发现她有个缺点: 如果当数据是”5, 4, 3, 2, 1“的时候,此时我们将“无序块”中的记录插入到“有序块”时,估计俺们要崩盘, 每次插入都要移动位置,此 ...
- Linux系统介绍
类似Windows, Linux也是一个操作系统,Linux是一套开放源代码程序,并可以自由传播的类Unix操作系统软件,多用户,多任务并且支持多线程和多CPU的操作系统. Linux系统主要被应用于 ...