国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 將Django使用的數(shù)據(jù)庫(kù)從MySQL遷移到PostgreSQL的教程

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

2020-06-03 10:02calazan Python

這篇文章主要介紹了將Django使用的數(shù)據(jù)庫(kù)從MySQL遷移到PostgreSQL的教程,同時(shí)提到了一些注意事項(xiàng),需要的朋友可以參考下

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

CREATE DATABASE dbname OWNER rolename;

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

在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': '',
  }
}

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

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

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

盡管我們?cè)谙惹暗牟襟E中指定了 –no-initial-data ,為了防止在遷移過(guò)程中用戶的自定義數(shù)據(jù)在未知情況下加入了表中,我們最好還是truncate一下新建的表,我們可以生成一個(gè)SQL腳本,運(yùn)行:
 

python manage.py sqlflush --database=postgresql

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

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

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

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

你也許想只導(dǎo)出特定的apps里的數(shù)據(jù),或者只導(dǎo)出一個(gè)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ù)庫(kù)中
 

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

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

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

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

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

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

主鍵的硬編碼

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

原生SQL語(yǔ)句

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

大小寫敏感

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 狠狠艹 | 一级毛片视频 | 韩国av一区二区 | 久久免费看少妇a高潮一片黄特 | 国产精品久久久久久久午夜片 | 久久精品电影 | 香蕉成人啪国产精品视频综合网 | 欧洲一区二区三区 | 一区二区三区久久久 | 国产高清免费 | 国产精品福利午夜在线观看 | 亚洲激情综合 | 欧美日韩第一页 | 欧美天天| 日韩不卡二区 | 国产一区二区三区久久久 | 亚洲成人精品一区 | 国产美女一区二区三区 | 久久久久久久一区 | 精品免费| 亚洲国产精品一区 | 午夜视频免费在线观看 | 一级高清| 女人高潮特级毛片 | 精品国产欧美一区二区 | 欧美久久视频 | 一大道一二三区不卡 | 国内精品三级 | 精品美女一区 | 一区在线视频 | 日韩久久久 | 色999国产 | 久久久午夜爽爽一区二区三区三州 | 中文字幕日产乱码六区小草 | 精品电影 | 亚洲色图二区 | 婷婷激情综合 | 日韩欧美成人影院 | 搞黄视频在线观看 | 亚洲视频综合 | 国产在线a|