国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

將Django使用的數(shù)據(jù)庫從MySQL遷移到PostgreSQL的教程

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 14:32:28
文檔

將Django使用的數(shù)據(jù)庫從MySQL遷移到PostgreSQL的教程

將Django使用的數(shù)據(jù)庫從MySQL遷移到PostgreSQL的教程:我們已對 Django1.6 app完成了數(shù)據(jù)庫從mysql到PostgreSQL的遷移,如果你的環(huán)境很干凈,這個過程就會很簡單,只要允許syncdb 或者 migrate創(chuàng)建表,truncating表中的數(shù)據(jù),然后運(yùn)行dumpdata 和loaddatamanagement命令就完成了。 第一步,在
推薦度:
導(dǎo)讀將Django使用的數(shù)據(jù)庫從MySQL遷移到PostgreSQL的教程:我們已對 Django1.6 app完成了數(shù)據(jù)庫從mysql到PostgreSQL的遷移,如果你的環(huán)境很干凈,這個過程就會很簡單,只要允許syncdb 或者 migrate創(chuàng)建表,truncating表中的數(shù)據(jù),然后運(yùn)行dumpdata 和loaddatamanagement命令就完成了。 第一步,在

我們已對 Django1.6 app完成了數(shù)據(jù)庫從mysql到PostgreSQL的遷移,如果你的環(huán)境很干凈,這個過程就會很簡單,只要允許syncdb 或者 migrate創(chuàng)建表,truncating表中的數(shù)據(jù),然后運(yùn)行dumpdata 和loaddatamanagement命令就完成了。
第一步,在你的PostgreSQL數(shù)據(jù)庫中創(chuàng)建一個空的實(shí)例:

CREATE DATABASE dbname OWNER rolename;

第二步,在你的Django中給創(chuàng)建的數(shù)據(jù)庫加上配置

在setting.py 中,我們這樣配置:

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.mysql',
 'NAME': 'dbname',
 'USER': 'dbuser',
 'PASSWORD': 'dbpass',
 'HOST': 'mysql.example.com',
 'PORT': '',
 },
 'postgresql': {
 'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'NAME': 'dbname',
 'USER': 'dbuser',
 'PASSWORD': 'dbpass',
 'HOST': 'postgresql.example.com',
 'PORT': '',
 }
}

這樣我們就指定了以后名稱操作的是哪個數(shù)據(jù)庫。
第三步,在PostgreSQL實(shí)例中創(chuàng)建表

python manage.py syncdb --migrate --no-initial-data --database=postgresql

在PostgreSQL中運(yùn)行syncdb 和 migrations,這個過程并沒有初始數(shù)據(jù)。
第四步,truncate新創(chuàng)建的表

盡管我們在先前的步驟中指定了 –no-initial-data ,為了防止在遷移過程中用戶的自定義數(shù)據(jù)在未知情況下加入了表中,我們最好還是truncate一下新建的表,我們可以生成一個SQL腳本,運(yùn)行:

python manage.py sqlflush --database=postgresql

第五步,從mysql中備份數(shù)據(jù)到JSON 文件中

Django 有一個dumpdata命令,用它可以生成一個數(shù)據(jù)庫無關(guān)的備份,默認(rèn)格式是JSON。

python manage.py dumpdata --all --natural --indent=4 > dbname.json

這里的 -all 參數(shù)是為了確保你在導(dǎo)出數(shù)據(jù)的過程中有可能有你自己的過濾和修改數(shù)據(jù)的需求,-natural 參數(shù)告訴Django使用natural keys(如果可用的話) –indent 參數(shù)是為了使輸出更加可讀。

你也許想只導(dǎo)出特定的apps里的數(shù)據(jù),或者只導(dǎo)出一個celery logs ,這樣的話,你就可以使用 –exclude參數(shù),例如:

python manage.py dumpdata --all --natural --exclude=djcelery --exclude=search.SearchLog --indent=4 > dbname.json

第六步,加載JSON數(shù)據(jù)到PostgreSQL數(shù)據(jù)庫中

python manage.py loaddata dbname.json --database=postgresql

基本上遷移的過程就結(jié)束了,現(xiàn)在你只要修改一下你的數(shù)據(jù)庫配置,然后是PostgerSQL成為默認(rèn)的數(shù)據(jù)庫。

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'NAME': 'dbname',
 'USER': 'dbuser',
 'PASSWORD': 'dbpass',
 'HOST': 'postgresql.example.com',
 'PORT': '',
 }
}

在我們的情況下,我們的數(shù)據(jù)庫不是很干凈,我們的數(shù)據(jù)庫是給一個PHP的遺留代碼創(chuàng)建的,我們現(xiàn)在還在一步步擺脫它,我們有一些Django之外的數(shù)據(jù)庫,并且都在被程序使用,為了把這些遷移到PostgreSQL中,我使用了這個工具,過程還是簡單一些。
注意事項(xiàng)
Django 信號

你可能想禁止這些,當(dāng)一個數(shù)據(jù)庫記錄創(chuàng)建的時候,你的程序可能就會發(fā)送給你的用過郵件,為了不打擾它們,在加載數(shù)據(jù)的時候,你需要保證它們被禁止了,Here's one way to handle this 這里我們使用了檢測器保證信號不會別觸發(fā)。
約束(像非空,unique 和外鍵)

我們的數(shù)據(jù)庫遷移過程碰到了很多這種問題,比如一個外鍵約束,但是其他的一個表不存在了,有一下空置的記錄,但是模型定義中不允許,比如復(fù)制的過程中存在unique約束,這些都需要手動干預(yù),我必須使用SQL語句清除掉這些,Dumpdata 和loaddata 將會檢測到這些,所以你的數(shù)據(jù)庫必須是一個干凈的一致的狀態(tài)。

主鍵的硬編碼

這很痛苦,因?yàn)樵谖覀兊臏y試 suite中,到處都是主鍵的硬編碼,所以很多測試到失敗了,因?yàn)槭褂肞ostgreSQL 處理的序列的方法和mysql不太一樣,我必須手動修改700多個測試用例,大都是很簡單的修改但是很消耗時間。

原生SQL語句

幸運(yùn)的是,我們只有一處使用了原生sql語句,有些mysql中的函數(shù)在PostgreSQL中不適用,我們只用修改為在PostgreSQl中相同功能的函數(shù)就可以了。

大小寫敏感

字符串比較在PostgreSQL中是大小寫敏感的,但是在Mysql中不是,我在遷移非Django數(shù)據(jù)表過程中也遇到了一些問題,索引創(chuàng)建的時候,命令需要id,但是字段的名字是Id(字母I),我只要重命名為id就可以了。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

將Django使用的數(shù)據(jù)庫從MySQL遷移到PostgreSQL的教程

將Django使用的數(shù)據(jù)庫從MySQL遷移到PostgreSQL的教程:我們已對 Django1.6 app完成了數(shù)據(jù)庫從mysql到PostgreSQL的遷移,如果你的環(huán)境很干凈,這個過程就會很簡單,只要允許syncdb 或者 migrate創(chuàng)建表,truncating表中的數(shù)據(jù),然后運(yùn)行dumpdata 和loaddatamanagement命令就完成了。 第一步,在
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产精品久久久久999 | 欧美性xxxx极品高清 | 欧美激情一区二区三区不卡 | 热久久91 | 日韩欧美精品 | 国产成人精品亚洲一区 | 欧美日韩在线一区二区三区 | 国产日韩欧美综合在线 | 国产成人综合欧美精品久久 | 2019亚洲日韩新视频 | 激情另类国内一区二区视频 | 激情综合久久 | 国产成人久久精品二区三区牛 | 亚洲韩国日本欧美一区二区三区 | 欧美 日韩 中文字幕 | 欧美日韩a | 玖玖国产精品 | 欧美日韩精品一区二区三区视频播放 | 久久久久久亚洲精品中文字幕 | 亚洲欧美精品伊人久久 | 国产精品一区二区三区免费 | 亚洲专区欧美 | 国产一区精品视频 | 亚洲欧美日韩在线观看 | 国产成人综合久久 | 日韩欧美高清 | 精品视频二区 | 成人a毛片免费视频观看 | 91久久综合九色综合欧美98 | 精品在线网站 | 国产 欧美 在线 | 在线观看亚洲一区二区 | 国外欧美一区另类中文字幕 | 一级毛片私人影院免费 | 亚洲免费a | 国产精品第十页 | 久久久久女人精品毛片九一 | 免费观看日韩大尺码观看 | 九九啪 | 国产丰满眼镜女在线观看 | 劲爆欧美色欧美 |