<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海上月明

    editer by sun
    posts - 162, comments - 51, trackbacks - 0, articles - 8
       :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

    Django與遺留系統和數據庫集成【轉】

    Posted on 2010-11-04 13:38 pts 閱讀(908) 評論(0)  編輯  收藏

    From:http://www.czug.org/python/django/17.html

    盡管Django最適合從零開始開發項目--所謂的"綠色領域"開發--將框架與遺留系統和數據庫集成是可能的,本章解釋一些 
    集成策略 

    與遺留數據庫集成 
    Django的數據庫層從Python代碼生成SQL schemas--但是對于遺留數據庫,你已經擁有SQL schemas,這種情況下你需要為你 
    已經存在的數據庫表寫模型(由于性能的原因,Django的數據庫層不支持通過運行時自省數據庫的不工作的對象-關系映射, 
    為了使用數據庫API,你需要寫模型代碼),幸運的是,Django帶有通過閱讀你的數據庫表規劃來生成模型代碼的輔助工具 
    該輔助工具稱為manage.py inspectdb 

    使用inspectdb 
    inspectdb輔助工具檢查你的settings文件指向的數據庫,決定你表示你的表的Django模型并打印Python模型代碼到標準輸出 
    這里是典型的從零開始的遺留數據庫處理的過程,唯一的前提是Django已經安裝并且你有一個遺留數據庫 
    1,通過運行django-admin.py startproject mysite(這里mysite是你的項目名)創建Django項目,我們將在例子中使用mysit 
    e作為項目名 
    2,在項目中編輯settings文件mysite/settings.py來告訴Django你的數據庫連接參數是什么以及數據庫名是什么,特別的, 
    你將想指定DATABASE_NAME,DATABASE_ENGINE,DATABASE_USER,DATABASE_PASSWORD,DATABASE_HOST和DATABASE_PROT設置 
    3,通過運行python mysite/manage.py startapp myapp(這里myapp是你的app名)來在你的項目中創建Django app,我們這里 
    將使用myapp作為項目名 
    4,運行命令python mysite/manage.py inspectdb,這將檢查DATABASE_NAME數據庫中的表并為每個表打印模型類,看看輸出 
    來了解inspectdb可以做什么事情 
    5,在你的app里通過使用標注shell輸出重定向保存輸出到models.py文件: 
    python mysite/manage.py inspectdb > mysite/myapp/models.py 
    6,編輯mysite/myapp/models.py文件,整理生成的模型并且做你需要的自定義,我們將在下一節對此給出一些提示 

    整理生成的模型 
    你可能料想到了,數據庫省查不是完美的,你將需要做一些輕量的結果模型代碼的整理,這里是處理生成的模型的一些指示: 
    1,每個數據庫表都被轉換為一個模型類--即,在數據庫表和模型類之間有一個一對一映射,這意味著你將需要對任何多對多 
    鏈接表重整模型為ManyToManyField對象 
    2,每個生成的模型對每個域有一個屬性--包括id主鍵域,盡管如此,如果模型沒有主鍵,調用它Django會自動添加id主鍵域 
    這樣,如果你非常肛門,你將像刪除任何像這樣的行,因為它們是冗余的: 
    id = models.IntegerField(primary_key=True) 
    3,每個域的類型(如CharField,DateField)通過查看數據庫列類型(如VARCHAR,DATE)來決定,如果inspectdb不能映射一個 
    列的類型到模型域,它將使用TextField并在生成的模型中該域附近插入Python注釋"該域類型是猜的",當心它,如果需要則 
    對應的改變域類型 
    4,如果數據庫列名是Python保留字(如pass,class或者for),inspectdb將添加'_field'到屬性名,例如,如果一個表有一 
    個列for,生成的模型將有一個域for_field,db_column屬性設置為'for'.inspectdb將插入Python注釋'域被重命名因為它是 
    Python保留字'到域附近 
    5,如果你的數據庫包含引用到其它表的表(大部分數據庫這樣做),你可能需要重新安排生成的模型的順序來使引用其它模型 
    的模型正確的排序,例如,模型Foo有一個ForeignKey到模型Bar,則模型Bar應該在模型Foo之前定義 
    6,inspectdb為PostgreSQL,MySQL和SQLite檢測主鍵,即它在合適的地方插入primary_key=True,對于其它數據庫,你將需 
    要在每個模型中為至少一個域插入primary_key=True,因為Django模型需要有一個primary=True的域 
    7,外鍵檢測只與PostgreSQL和某些類型的MySQL表工作,其他情況下,外鍵域將生成為IntegerField(假設外鍵列為INT列) 


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲欧洲精品在线| 亚洲精品欧美综合四区| 久久久久久精品免费免费自慰| 亚洲午夜精品久久久久久人妖| 成年女人免费视频播放77777| 黄色网址免费在线| 亚洲热妇无码AV在线播放| 免费观看无遮挡www的视频| 亚洲成a人无码亚洲成av无码| 亚洲中文字幕第一页在线| 国产免费毛不卡片| 国产免费AV片在线观看播放| 亚洲av日韩av综合| 亚洲人成网站在线播放vr| 无人影院手机版在线观看免费| av电影在线免费看| 亚洲色欲色欲www在线播放| 亚洲熟妇无码AV在线播放| 成年人在线免费看视频| 国偷自产一区二区免费视频| 亚洲中文字幕久久无码| 亚洲av无码精品网站| 免费国产美女爽到喷出水来视频| 久9热免费精品视频在线观看| 国产亚洲美女精品久久久久| 久久久久亚洲精品日久生情 | **真实毛片免费观看| 男女啪啪免费体验区| 亚洲首页国产精品丝袜| 国产精品亚洲片在线观看不卡| 女人18毛片水真多免费看| 91精品全国免费观看含羞草| 日本一区二区三区免费高清在线| 亚洲一卡二卡三卡| 亚洲成AV人片在线观看| 国产麻豆免费观看91| 曰批视频免费30分钟成人| 久久午夜夜伦鲁鲁片免费无码| 黄色一级毛片免费看| 亚洲乱妇熟女爽到高潮的片| 亚洲蜜芽在线精品一区|