python开发部署时新增数据库中表的方法
在項目版本讓運維部署時,涉及到數據庫表的增加問題,想了一下,可以有四種方法
1.使用SQLAlchemy的db.create_all()方法
# -*- coding:utf-8 -*- from flask import Flask from flask_sqlalchemy import SQLAlchemy from 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'] = 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()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 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'] = 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 initsecound:通過migrate命令創建自動遷移腳本,此時會在數據庫增加一張表(alembic_version),記錄migrate更新的版本號
python migrate_create_table.py db migratethird:通過 upgrade命令更新到數據庫中
python migrate_create_table.py db upgrade這時候打開數據庫,便可看到新增的表,以及alembic_version表中新增的版本號
?注意點:1.在以后數據庫遷移更新中,不再需要初始化,所以跳過init命令
?????????????? 2.以上命令是在linux命令窗口中,在pycharm代碼編輯軟件中為
?????????????????????? I.點擊 Edit Configurations???
???????????? ? ? ? ? II.輸入 db? **** 等命令???
?4.直接使用sql語句
?類似于第二種,區別在于運維部署多了一個步驟
?
此四種方法,推薦使用第二種進行新增表,第三種更利于數據庫結構的回滾(使用 downgrade命令)。
?
總結
以上是生活随笔為你收集整理的python开发部署时新增数据库中表的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel 实现app支付宝退款
- 下一篇: 小样本论文笔记5:Model Based