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
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命令)。
※httpclient連接池相關參數的坑
※lambda表達式的學習
※InnoDB關鍵特性之自適應hash索引
※Android 基於 Speex 的高度封裝語音庫,0 耦合,沒三方jar包
※echarts添加點擊事件
TAG:達人科技 |
※python web開發-flask連接sqlite資料庫
※iPhone資料轉移新方法、Apple Watch對講機功能
※KooTeam新版本發布,增加 Mysql 資料庫支持
※TiesNetwork宣布新的區塊鏈資料庫產品將於4月發布
※開源資料庫中間件:Kingshard
※Apple的雲資料庫FoundationDB現在開源
※Oracle資料庫定時器Job
※卧龍會:軟體Hibernate session開啟與資料庫物理連接的時間關係
※thinkphp5連接oracle資料庫
※python後台架構Django——連接讀寫mysql資料庫
※python與 masql資料庫,從基本開始做起
※資料庫系統概念中table/view/schema/index的關係
※Intel Tiger Lake處理器出現在UserBenchmark資料庫中
※Google宣布Cloud Firestore文檔資料庫新進展 覆蓋10個新區域
※Zero Day Initiative披露了Windows JET資料庫0Day漏洞
※完全託管的圖形資料庫服務Amazon Neptune上線
※《Birthday Wonderland》設定資料集發售決定
※Oracle 資料庫中enq:TX-index contention等待時間淺析
※科學家開發出iDog資料庫
※Gson+pulltorefer+資料庫+httpurlconnection+非同步(更新)