<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
       :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理

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

    盡管Django最適合從零開始開發(fā)項(xiàng)目--所謂的"綠色領(lǐng)域"開發(fā)--將框架與遺留系統(tǒng)和數(shù)據(jù)庫(kù)集成是可能的,本章解釋一些 
    集成策略 

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

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

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


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一区二区三区精品高清视频免费在线播放 | 国产精品亚洲片在线va| 日韩免费电影网址| 黑人精品videos亚洲人| 国产性生大片免费观看性| 亚洲国产精品尤物YW在线观看| 美国免费高清一级毛片| 免费观看午夜在线欧差毛片| 免费国产黄网站在线观看动图| 四虎永久免费影院| 九一在线完整视频免费观看| 亚洲国产一区视频| 搡女人免费免费视频观看| 亚洲精品无码专区在线在线播放| 最近免费中文字幕MV在线视频3| 亚洲精品午夜无码电影网| 午夜精品射精入后重之免费观看| 亚洲中文字幕乱码熟女在线| 成人午夜大片免费7777| 国产亚洲一卡2卡3卡4卡新区 | 久久亚洲中文字幕无码| 亚洲精品动漫人成3d在线| 色播在线永久免费视频网站| 亚洲日本中文字幕区| 毛片a级毛片免费播放100| 美女免费精品高清毛片在线视| 国产亚洲精品成人AA片新蒲金| 一级毛片在线观看免费| 亚洲欧美aⅴ在线资源| 亚洲国产香蕉人人爽成AV片久久 | 三级片免费观看久久| 亚洲国产精品无码AAA片| 在线看免费观看AV深夜影院| 国产精品亚洲va在线观看| 国产AV无码专区亚洲AV手机麻豆| 亚洲免费视频网站| 无码一区二区三区亚洲人妻| 国产亚洲精品影视在线产品| 免费夜色污私人影院网站| 亚洲AV无码国产丝袜在线观看 | 国产免费AV片在线观看播放|