Alembic的AutoGenerate與SQLite

Alembic 是用來(lái)完成 SQLalchemy 數(shù)據(jù)表遷移的工具,同時(shí)也提供了自動(dòng)生成遷移的選項(xiàng)來(lái)簡(jiǎn)化工作政敢。不過(guò)在和 SQLite 協(xié)作時(shí)原茅,由于SQLite并不是支持所有的SQL命令,所以有一些需要注意的地方堕仔,記在這里擂橘。

啟用Alembic

具體見(jiàn)文檔,主要有以下幾步

  1. 初始化環(huán)境
  2. 修改ini文件摩骨,最主要的一項(xiàng)是把DB的位置改對(duì)通贞。

然后就可以寫(xiě)migrate腳本了朗若。

啟用 AutoGenerate

上面教程頁(yè)面中的Migration需要自己寫(xiě),不過(guò)Alembic還提供了自動(dòng)生成Migration的選項(xiàng)昌罩,首先上文檔哭懈。

如果需要支持auto,需要做下面的幾件事情:

  1. alembic/env.py 中找target_metadata茎用,默認(rèn)生成的是這樣:
# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
target_metadata = None

看注釋遣总,如果需要支持autogenerate,把代碼改成注釋中的樣子轨功。注意旭斥,如果Base不是放在根目錄下,而是在子目錄中的古涧,像我這個(gè)的結(jié)構(gòu):

.
├── README.md
├── alembic
│   ├── README
│   ├── env.py
│   ├── script.py.mako
│   └── versions
│       └── XXXXXXXX_foobar.py
├── alembic.ini
├── db
│   └── foobar.db
├── foo.py
├── main.py
├── models
│   ├── __init__.py
│   ├── base.py
│   └── foobar.py
└── requirements.txt

則需要在導(dǎo)入Base前加上這兩句:

import os, sys
sys.path.append(os.getcwd())

要不然報(bào)找不到的錯(cuò)垂券,嗯。

  1. 改Model
  2. 運(yùn)行 alembic revision --autogenerate -m "blah blah blah ..."

在運(yùn)行成功后羡滑,會(huì)在versions目錄下生成一個(gè)新的migration菇爪,所有自動(dòng)生成的語(yǔ)句都會(huì)放在注釋中間方便review。

和SQLite一起用

由于SQLite支持的SQL命令不全柒昏,所以有些命令凳宙,如ALTER TABLE之類的不能用。好在Alembic在版本0.7.0后职祷,增加了batch的選項(xiàng)氏涩,它會(huì)根據(jù)新的Model創(chuàng)建一個(gè)Schema,然后把老的數(shù)據(jù)移過(guò)來(lái)堪旧。具體的做法就是在 alembic/env.py 的函數(shù) run_migrations_online 函數(shù)中,找到 context.configure() 函數(shù)奖亚,在其中加入 render_as_batch=True 選項(xiàng)即可淳梦。不過(guò)在github上看到一個(gè)更靈活的辦法:

        context.configure(
            connection=connection,
            target_metadata=target_metadata,
            render_as_batch=config.get_main_option('sqlalchemy.url').startswith('sqlite:///'),
        )

這樣只在sqlite數(shù)據(jù)庫(kù)的時(shí)候會(huì)用batch,其它就不會(huì)了昔字。


暫時(shí)就這些爆袍,反正只是保證能用了,也沒(méi)管后面的原理作郭,回頭有需求的話再深挖吧陨囊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市夹攒,隨后出現(xiàn)的幾起案子蜘醋,更是在濱河造成了極大的恐慌,老刑警劉巖咏尝,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件压语,死亡現(xiàn)場(chǎng)離奇詭異啸罢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)胎食,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)扰才,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人厕怜,你說(shuō)我怎么就攤上這事衩匣。” “怎么了粥航?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵琅捏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我躁锡,道長(zhǎng)午绳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任映之,我火速辦了婚禮拦焚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杠输。我一直安慰自己赎败,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布蠢甲。 她就那樣靜靜地躺著僵刮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鹦牛。 梳的紋絲不亂的頭發(fā)上搞糕,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音曼追,去河邊找鬼窍仰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛礼殊,可吹牛的內(nèi)容都是我干的驹吮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晶伦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碟狞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起婚陪,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤族沃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體竭业,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡智润,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了未辆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窟绷。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咐柜,靈堂內(nèi)的尸體忽然破棺而出兼蜈,到底是詐尸還是另有隱情,我是刑警寧澤拙友,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布为狸,位于F島的核電站,受9級(jí)特大地震影響遗契,放射性物質(zhì)發(fā)生泄漏辐棒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一牍蜂、第九天 我趴在偏房一處隱蔽的房頂上張望漾根。 院中可真熱鬧,春花似錦鲫竞、人聲如沸辐怕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寄疏。三九已至,卻和暖如春僵井,著一層夾襖步出監(jiān)牢的瞬間陕截,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工批什, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留农曲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓渊季,卻偏偏與公主長(zhǎng)得像朋蔫,于是被迫代替她去往敵國(guó)和親罚渐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子却汉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容