最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年04月11日 10:39:38   作者:calazan  
這篇文章主要介紹了將Django使用的數(shù)據(jù)庫從MySQL遷移到PostgreSQL的教程,同時提到了一些注意事項,需要的朋友可以參考下

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

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實例中創(chuàng)建表

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

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

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

python manage.py sqlflush --database=postgresql

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

Django 有一個dumpdata命令,用它可以生成一個數(shù)據(jù)庫無關(guā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成為默認的數(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中,我使用了這個工具,過程還是簡單一些。
注意事項
Django 信號

你可能想禁止這些,當一個數(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)。

主鍵的硬編碼

這很痛苦,因為在我們的測試 suite中,到處都是主鍵的硬編碼,所以很多測試到失敗了,因為使用PostgreSQL 處理的序列的方法和mysql不太一樣,我必須手動修改700多個測試用例,大都是很簡單的修改但是很消耗時間。

原生SQL語句

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

大小寫敏感

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

相關(guān)文章

  • Python中嘗試多線程編程的一個簡明例子

    Python中嘗試多線程編程的一個簡明例子

    這篇文章主要介紹了Python中嘗試多線程編程的一個簡明例子,由于GIL的存在,Python中的多線程編程一個是熱點和難點問題,需要的朋友可以參考下
    2015-04-04
  • Python在字典中獲取帶權(quán)重的隨機值實現(xiàn)方式

    Python在字典中獲取帶權(quán)重的隨機值實現(xiàn)方式

    這篇文章主要介紹了Python在字典中獲取帶權(quán)重的隨機值,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • python實現(xiàn)拓撲排序的基本教程

    python實現(xiàn)拓撲排序的基本教程

    拓撲排序是對有向無環(huán)圖的一種排序,發(fā)現(xiàn)自己并沒有真的理解拓撲排序,再次學(xué)習(xí)了下,所以下面這篇文章主要給大家介紹了關(guān)于python實現(xiàn)拓撲排序的基本教程,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下,
    2018-03-03
  • 使用TensorBoard進行超參數(shù)優(yōu)化的實現(xiàn)

    使用TensorBoard進行超參數(shù)優(yōu)化的實現(xiàn)

    這篇文章主要介紹了使用TensorBoard進行超參數(shù)優(yōu)化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python request post 列表的方法詳解

    python request post 列表的方法詳解

    這篇文章主要介紹了python request post 列表的方法詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python轉(zhuǎn)換itertools.chain對象為數(shù)組的方法

    Python轉(zhuǎn)換itertools.chain對象為數(shù)組的方法

    這篇文章主要介紹了Python轉(zhuǎn)換itertools.chain對象為數(shù)組的方法,通過代碼給大家介紹了itertools 的 chain() 方法,需要的朋友可以參考下
    2020-02-02
  • python 中如何獲取列表的索引

    python 中如何獲取列表的索引

    這篇文章主要介紹了python 中如何獲取列表的索引,在文中給大家提到了python 返回列表中某個值的索引,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Python+redis通過限流保護高并發(fā)系統(tǒng)

    Python+redis通過限流保護高并發(fā)系統(tǒng)

    這篇文章主要介紹了Python+redis通過限流保護高并發(fā)系統(tǒng),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • python Flask實現(xiàn)restful api service

    python Flask實現(xiàn)restful api service

    本篇文章主要介紹了python Flask實現(xiàn)restful api service,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • opencv-python 提取sift特征并匹配的實例

    opencv-python 提取sift特征并匹配的實例

    今天小編就為大家分享一篇opencv-python 提取sift特征并匹配的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論

大连市| 禹州市| 全椒县| 平潭县| 金塔县| 盐池县| 赤峰市| 依兰县| 和林格尔县| 湖南省| 延津县| 红安县| 台前县| 东台市| 东乡县| 汨罗市| 六安市| 封丘县| 鸡泽县| 乐业县| 商城县| 禄劝| 武山县| 乌拉特中旗| 元江| 蕲春县| 江城| 昌宁县| 安阳市| 讷河市| 犍为县| 青龙| 奉新县| 陆河县| 东台市| 弥勒县| 勃利县| 吴旗县| 通州市| 花垣县| 甘谷县|