摘要:當(dāng)你第一次用的數(shù)據(jù)庫請求表中不存在的字段時會導(dǎo)致錯誤。不關(guān)心數(shù)據(jù)庫中是否存在未被模型表示的。缺點數(shù)據(jù)量大的時候,速度相對較慢,表的關(guān)系比較復(fù)雜的時候可以導(dǎo)入不成功。
djang data migration
在使用django框架開發(fā)的過程中,我們不可避免的遇到models層的變更,就涉及到數(shù)據(jù)庫表的變動,django給我提供了一個migration的工具來做這些數(shù)據(jù)庫表的變更。
djang migration如果不加appname,那么就是指所有包含migrations 目錄的app
# 基于當(dāng)前的model 檢測修改,創(chuàng)建遷移策略文件 python manage.py makemigrationsmigrations失敗# 執(zhí)行遷移動作 python manage.py migrate
有時候如果models改動比較大,migrations會失敗,這個時候有兩種選擇,手工去修改migrations文件,第二種是清除所有migrations,重新migrate
手工修改migrations文件通過報錯信息加上SQL語句找到找到問題,然后具體問題具體分析,是修改數(shù)據(jù)庫里面的數(shù)據(jù),還是修改migrations生成的腳本。
python manage.py migrate python manage.py sqlmigrate0001
當(dāng)處理模型修改的時候:
如果模型包含一個未曾在數(shù)據(jù)庫里建立的字段,Django會報出錯信息。 當(dāng)你第一次用Django的數(shù)據(jù)庫API請求表中不存在的字段時會導(dǎo)致錯誤。
Django不關(guān)心數(shù)據(jù)庫表中是否存在未在模型中定義的列。
Django不關(guān)心數(shù)據(jù)庫中是否存在未被模型表示的table。
在使用SQLite3數(shù)據(jù)庫時, 因為SQLite3 不支持刪除列操作,只有有限地 ALTER TABLE 支持,
所以修改數(shù)據(jù)庫列的操作被新建表然后select into newtable 代替,所以會存在更多問題
參考
http://www.tuicool.com/articles/yM3IVr
python manage.py makemigrations You are trying to add a non-nullable field "college" to majorproperty without a default; we can"t do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows) 2) Quit, and let me add a default in models.py Select an option: 1 Please enter the default value now, as valid Python The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now() >>> 1
在migrate的時候提示你需要指定一個默認(rèn)值,用以處理NULL的情況
清除migrations清除所有app目錄/migrations/下除__init__.py 文件之外的py文件
find . -path "*migrations*" -name "*.py" -not -path "*__init__*" -exec rm {} ;squashmigrations
當(dāng)migrations越來越多的時候執(zhí)行 makemigrations 和 migrate 就會越來越慢,可以考慮對其瘦身(減少migrations文件的數(shù)量)
python manage.py squashmigrations schools 0002數(shù)據(jù)導(dǎo)入導(dǎo)出 數(shù)據(jù)導(dǎo)出
django 項目提供了一個導(dǎo)出的方法 python manage.py dumpdata, 不指定 appname 時默認(rèn)為導(dǎo)出所有的app
python manage.py dumpdata [appname] > appname_data.json數(shù)據(jù)導(dǎo)入
數(shù)據(jù)導(dǎo)入,不需要指定 appname
python manage.py loaddata appname_data.json
優(yōu)點:可以兼容各種支持的數(shù)據(jù)庫,也就是說,以前用的是 SQLite3,可以導(dǎo)出后,用這種方法導(dǎo)入到 MySQL, PostgreSQL等數(shù)據(jù)庫,反過來也可以。
缺點:數(shù)據(jù)量大的時候,速度相對較慢,表的關(guān)系比較復(fù)雜的時候可以導(dǎo)入不成功。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/37920.html
摘要:地址序列化為靈感來源于多個實例單個實例排除字段僅包括字段關(guān)系查詢深度默認(rèn)為增加一些自定義的函數(shù)可傳遞參數(shù)的函數(shù)像一樣使用與相比為什么很多人都認(rèn)為更好用大概就是因為更方便基本查詢已實現(xiàn)示例關(guān)系查詢其它去掉一些的重復(fù)工作以為例通過繼承中的就 GitHub地址: https://github.com/honmaple/maple-json sqlalchemy object序列化為json...
摘要:一個用來做數(shù)據(jù)遷移的擴(kuò)展,一般都是結(jié)合使用,在上一篇文章中我也介紹了這個擴(kuò)展,需要的小伙伴可以看一下,后續(xù)我會將更深層的寫出來。 flask-migrate一個用來做數(shù)據(jù)遷移的falsk擴(kuò)展,一般都是結(jié)合flask-sqlalchemy使用,在上一篇文章中我也介紹了這個擴(kuò)展,需要的小伙伴可以看一下,后續(xù)我會將flask-sqlalchemy更深層的寫出來。【config.py】 SQL...
摘要:文檔開發(fā)基于單元測試實現(xiàn)的自動化文檔當(dāng)前文檔開發(fā)計劃功能開發(fā)當(dāng)前計劃功能技術(shù)債務(wù)清償當(dāng)前技術(shù)債務(wù)單元測試盡可能減少當(dāng)前單元測試成為開發(fā)者需要加入我們的組織,如有相關(guān)意愿請發(fā)送郵件至小牛哥,我們會聯(lián)系你的。 QueryPHP 非常歡迎各位給我們共同的偉大的作品添磚加瓦,實現(xiàn)為 PHP 社區(qū)提供一個好框架的美好愿景。 文檔開發(fā).基于單元測試實現(xiàn)的自動化文檔 當(dāng)前文檔開發(fā) 計劃功能.開發(fā)...
摘要:命令需要注冊回調(diào)函數(shù)來將對象添加到導(dǎo)入列表。創(chuàng)建遷移腳本在,數(shù)據(jù)庫遷移工作由遷移腳本完成。函數(shù)實施數(shù)據(jù)庫更改,是遷移的一部分,函數(shù)則刪除它們。另一方面,自動遷移通過尋找模型定義和數(shù)據(jù)庫當(dāng)前狀態(tài)間的不同為和生成代碼。 9、數(shù)據(jù)庫在視圖函數(shù)中的使用 在前面章節(jié)描述的數(shù)據(jù)庫操作是可以在視圖函數(shù)中直接使用的。示例5-5展示的新版本主頁實現(xiàn)了用戶輸入名字并保存到數(shù)據(jù)庫中。 示例5-5. he...
閱讀 2579·2023-04-26 03:00
閱讀 1392·2021-10-12 10:12
閱讀 4190·2021-09-22 15:33
閱讀 2908·2021-09-22 15:06
閱讀 1530·2019-08-30 15:44
閱讀 2145·2019-08-30 13:59
閱讀 534·2019-08-30 11:24
閱讀 2407·2019-08-29 17:07