亚洲成人一区在线观看_天堂网www_国产精品久久9_中文在线播放_伊人天天_久久精品久久久精品美女

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 翻譯www.djangobook.com之第十七章:與遺留系統和數據庫集成

翻譯www.djangobook.com之第十七章:與遺留系統和數據庫集成
2010-01-13 23:44:33  作者:  來源:
盡管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列)


安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 精品无人乱码一区二区三区的优势 | 美女久久一区 | 欧美成人综合在线 | 久久免费的视频 | 91视频免费观看 | 黑人粗黑大躁护士 | 国产欧美日韩一区 | 亚洲午夜视频 | 成人精品国产 | 中文一区 | 免费观看一级特黄欧美大片 | www.日韩在线观看 | 成年人免费网站 | 黄免费观看 | 婷婷桃色网 | 亚洲一区二区三区在线 | 亚洲免费精品 | 中文字幕亚洲欧美日韩在线不卡 | 欧美精品成人 | 国产情侣一区二区三区 | 欧美性网| 亚洲精品乱码久久久久久麻豆不卡 | 欧美三级电影在线播放 | 国产免费看 | 亚洲第一黄色 | 久久最新网址 | 亚洲精品在线免费看 | aaa级片| 日本视频在线 | 91麻豆精品国产91久久久更新资源速度超快 | 一区二区精品在线 | 黄色三级视频 | 天天综合7799精品影视 | 成人激情视频在线免费观看 | www.黄色片视频 | 一区二区三区免费av | 欧美国产精品一区二区 | 精品日韩一区二区三区 | 婷五月综合 | 91精品国产91久久久久久 | 二区视频 |