日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2024/3/13 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python开发部署时新增数据库中表的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在項(xiàng)目版本讓運(yùn)維部署時(shí),涉及到數(shù)據(jù)庫表的增加問題,想了一下,可以有四種方法

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) #鏈接數(shù)據(jù)庫路徑 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://%s:%s@127.0.0.1:3306/%s?charset=%s' %(USER,PASSWD,DB,CHARTSET) #如果設(shè)置成 True (默認(rèn)情況),Flask-SQLAlchemy 將會(huì)追蹤對象的修改并且發(fā)送信號。這需要額外的內(nèi)存, 如果不必要的可以禁用它。 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True #如果設(shè)置成 True,SQLAlchemy 將會(huì)記錄所有 發(fā)到標(biāo)準(zhǔn)輸出(stderr)的語句,這對調(diào)試很有幫助。 app.config['SQLALCHEMY_ECHO'] = False # 數(shù)據(jù)庫連接池的大小。默認(rèn)是數(shù)據(jù)庫引擎的默認(rèn)值 (通常是 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__':#創(chuàng)建表db.create_all()

2.使用MySQLdb進(jìn)行新增表

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擴(kuò)展遷移數(shù)據(jù)庫

安裝相關(guān)插件
$ 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相關(guān) 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()

代碼寫好之后,運(yùn)行此文件,配合相關(guān)命令進(jìn)行數(shù)據(jù)庫更新

first:通過init命令來創(chuàng)建一個(gè)遷移庫,執(zhí)行后會(huì)在文件同級目錄創(chuàng)建一個(gè)migrations文件夾,里面存放了所有遷移腳本。

注意點(diǎn): 如果需要重新執(zhí)行此命令,需要?jiǎng)h除migrations文件夾,否則報(bào)文件夾已經(jīng)存在錯(cuò)誤 ? alembic.util.exc.CommandError: Directory migrations already exists

python migrate_create_table.py db init

secound:通過migrate命令創(chuàng)建自動(dòng)遷移腳本,此時(shí)會(huì)在數(shù)據(jù)庫增加一張表(alembic_version),記錄migrate更新的版本號

python migrate_create_table.py db migrate

third:通過 upgrade命令更新到數(shù)據(jù)庫中

python migrate_create_table.py db upgrade

這時(shí)候打開數(shù)據(jù)庫,便可看到新增的表,以及alembic_version表中新增的版本號

?注意點(diǎn):1.在以后數(shù)據(jù)庫遷移更新中,不再需要初始化,所以跳過init命令

?????????????? 2.以上命令是在linux命令窗口中,在pycharm代碼編輯軟件中為

?????????????????????? I.點(diǎn)擊 Edit Configurations???

???????????? ? ? ? ? II.輸入 db? **** 等命令???

?4.直接使用sql語句

?類似于第二種,區(qū)別在于運(yùn)維部署多了一個(gè)步驟

?

此四種方法,推薦使用第二種進(jìn)行新增表,第三種更利于數(shù)據(jù)庫結(jié)構(gòu)的回滾(使用 downgrade命令)。

?

總結(jié)

以上是生活随笔為你收集整理的python开发部署时新增数据库中表的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。