管理python程序的db schema

本人是個Pythoner,曾經對ruby嗤之以鼻,但每種語言都有本身的擅長方向,不能一味的否認一門語言。在維護一個採用ruby on rails框架的項目過程當中,發現rails不少優勢,這些均可以借鑑到python程序中:python

  1. db schema migrationmysql

  2. 遠程部署到指定環境git

本篇主要關注的是 db schema migration,在下一篇中將會介紹遠程部署python程序
db migration主要使用rails和rake兩個命令,下面的demo是運行在Mac OS上。github

環境準備

  1. git clone https://github.com/flying-bir...sql

  2. cd python-db-schem; sudo gem install bundlersegmentfault

  3. bundle installruby

Create Table

生成db文件,至關於sql文件

命令:框架

./bin/rails generate migration CreateJobTable

輸出:url

db/migrate文件夾下面生成 {timestamp}_create_job_table.rb

在上步生成的文件中,寫入具體的sql內容

採用以下格式:code

class CreateJobTable < ActiveRecord::Migration
  def change
    create_table :d_job do |t|
          t.string :name
          t.string :path
          t.string :team
          t.references :pipeline
          t.string :function
          t.text :url
          t.integer :exclude,default:0
    end
    add_foreign_key :d_job, :d_pipeline, column: :pipeline_id
  end
end

Apply SQL File

命令:

./bin/rake db:migrate

運行上面的命令以後,將會在本地的db中建立出一個d_job表。
使用mysql的show create table來查看d_job的具體信息:

mysql> show create table d_job \G
*************************** 1. row ***************************
       Table: d_job
Create Table: CREATE TABLE `d_job` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text,
  `path` text,
  `team` text,
  `pipeline_id` int(11) DEFAULT NULL,
  `function` varchar(120) DEFAULT NULL,
  `exclude` int(11) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `pipeline_id` (`pipeline_id`),
  CONSTRAINT `d_job_ibfk_1` FOREIGN KEY (`pipeline_id`) REFERENCES `d_pipeline` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

Rollback

運行下面的命令以後,上一步的db命令將會回滾,即drop table d_job

./bin/rake db:rollback  STEP=1
相關文章
相關標籤/搜索