注:本文已遷移至CSDN,後續的更新也會在CSDN。html
http://blog.csdn.net/houchaoqun_xmu/article/details/53813633python
http://blog.csdn.net/houchaoqun_xmumysql
【原】本文根據實際操做主要介紹了Django框架下MySQL的一些經常使用操做,核心內容以下:linux
-------------------------------------------------------------------------------------------------web
1. Linux環境下MySQL的安裝與配置sql
2. 【Linux】MySQL在Django框架下的基本操做數據庫
3. Django框架下,一些經常使用的數據庫操做(增刪改查 - python)django
4. 本文相關的一些參考網址vim
注:本文會根據實踐,持續更新文檔,若有錯誤,但願讀者指出哈!~服務器
-------------------------------------------------------------------------------------------------
-- 說明:本文中展現的MySQL是在虛擬機下進行的(參考網址:http://jingyan.baidu.com/article/425e69e6bbc6c7be14fc1640.html)
-- 期間,會彈出窗口讓你設置密碼,輸入密碼後,等待安裝便可,以下圖所示(注,本文因爲實踐過程當中忘記截圖,因此使用百度經驗的圖):
【方法一】ps -aux | grep mysql // 查看進程 【方法二】mysql -u root -p // 進入MySQL命令模式
-- 效果圖以下所示:
-- 在Linux環境下安裝MySQL完成後,就能夠開始進行一些基本的操做了!
格式: mysql -h主機地址 -u用戶名 -p用戶密碼 1、例1:鏈接到本機上的MYSQL 找到mysql的安裝目錄,通常能夠直接鍵入命令【mysql -uroot -p】,回車後提示你輸密碼,若是剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車便可進入到MYSQL中了,MYSQL的提示符是:mysql>
2、鏈接到遠程主機上的MYSQL 假設遠程主機的IP爲:10.0.0.1,用戶名爲root,密碼爲123。則鍵入如下命令: mysql -h10.0.0.1 -uroot -p123 (注:u與root能夠不用加空格,其它也同樣)
3、退出MYSQL命令 exit (回車)
-- 【mysql -uroot -p】本文是直接使用SSH客戶端鏈接的服務器,因此採用上述例1的方式,以下圖所示:
-- 在MySQL命令行模式下輸入【CREATE DATABASE TuringClass_DB CHARACTER SET utf8;】建立數據庫 TuringClass_DB;
-- 在Django項目目錄下輸入【python manage.py syncdb】建立相關的表;(注:此處是在Django項目下建表,還能夠在MySQL命令行模式下建表)
-- 在MySQL命令行模式下輸入【use TuringClass_DB;】制定當前操做的數據庫爲 TuringClass_DB;
-- 在MySQL命令行模式下輸入【show tables;】查看當前數據庫中的全部表;
-- CREATE DATABASE TuringClass_DB; // -- CREATE DATABASE TuringClass_DB CHARACTER SET utf8; // 本文選擇此方法建立數據庫 【注:此處MySQL關鍵字不區分大小寫,其中 TuringClass_DB 對應 setting.py 配置的數據庫】
Django項目 setting.py 中MySQL的配置以下所示:
'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'TuringClass_DB', 'USER': 'XXXXXX', 'PASSWORD': 'XXXXXX', # Setting when installing MySQL 'HOST': '127.0.0.1', 'PORT': '3306', }
-- 執行命令後的效果圖:
-- 簡單的方式:
CREATE TABLE person ( number INT(11), name VARCHAR(255), birthday DATE );
-- 若是表已存在,則使用關鍵詞IF NOT EXISTS能夠防止發生錯誤:
CREATE TABLE IF NOT EXISTS person ( number INT(11), name VARCHAR(255), birthday DATE );
drop database TuringClass_DB;
-- 效果圖以下所示:
【格式】drop table tableName1, tableName2; 【例子】drop table app_accounts_turingroletype,app_accounts_turinguser;
-- 效果圖以下所示:
【格式】desc 表名稱; 【例子】desc app_TuringClass_questionlist;
-- 效果圖以下所示:
select * from app_TuringClass_questionlist where QuestionID = 1;
-- 效果圖以下所示:
# 表position增長列test alter tableposition add(test char(10));
# 表position修改列test alter tableposition modify test char(20) not null;
# 表position修改列test默認值 alter tableposition alter test set default 'system';
# 表position去掉test默認值 alter tableposition alter test drop default;
# 表position去掉列test alter tableposition drop column test;
# 表depart_pos刪除主鍵 alter tabledepart_pos drop primary key;
# 表depart_pos增長主鍵 alter tabledepart_pos add primary key PK_depart_pos (department_id,position_id);
查詢時間:select now(); 查詢當前用戶:select user(); 查詢數據庫版本:select version(); 查詢當前使用的數據庫:select database();
-- 效果圖以下所示:
-- 參考網址:http://blog.csdn.net/leiyonglin/article/details/6799428
1. 插入數據:
>>> from books.models import Publisher >>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue', city='Berkeley', state_province='CA', country='U.S.A.', website='http://www.apress.com/') >>> p1.save()
2. 查詢數據:
-- 獲取指定表的全部數據:
>>> Publisher.objects.all() [<Publisher: Apress>, <Publisher: O'Reilly>]
-- 獲取指定表的單個數據對象:若是結果是多個對象或者沒有返回結果則會拋出異常
>>> Publisher.objects.get(name="Apress") <Publisher: Apress>
3. 條件查詢:
Publisher.objects.filter(name='Apress') [<Publisher: Apress>]
-- 正序排序:至關於 order by name asc
>>> Publisher.objects.order_by("name") [<Publisher: Apress>, <Publisher: O'Reilly>]
-- 逆序排序:至關於 order by name desc
>>> Publisher.objects.order_by("-name")
-- 限制返回數據:至關於 limit 1
>>> Publisher.objects.order_by('name')[0] <Publisher: Apress> _TuringUser = TuringRoleType.objects.get_or_create(RoleTypeID = RoleTypeID, RoleTypeName = RoleTypeName, DeletePermission = DeletePermission, PostPermission = PostPermission, SuperPermission = SuperPermission)[0]
4. 更新數據:
【方法一】
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing') 【方法二】 >>> p = Publisher.objects.get(name='Apress') #先查詢 >>> p.name = 'Apress Publishing' #更新 >>> p.save() #保存
5. 刪除數據:
【方法一】 >>> p = Publisher.objects.get(name="O'Reilly") >>> p.delete() 【方法二】 >>> Publisher.objects.filter(country='USA').delete()
6. 判斷數據是否存在:
if TuringRoleType.objects.filter(RoleTypeID = RoleTypeID).exists(): print "[RoleTypeID] = ",RoleTypeID + ", has been existed!" else: print "Table [TuringRoleType] RoleTypeID = ", RoleTypeID
-- 案例1,數據初始化 - 用戶類型表
def Population(): AddNewRoleType('admin', '管理員', True, True, True) AddNewRoleType('student', '學生用戶', True, True, False) AddNewRoleType('tourist', '遊客用戶', False, False, False) def AddNewRoleType(RoleTypeID, RoleTypeName, DeletePermission, PostPermission, SuperPermission): if TuringRoleType.objects.filter(RoleTypeID = RoleTypeID).exists(): print "[RoleTypeID] = ",RoleTypeID + ", has been existed!" else: print "Table [TuringRoleType] RoleTypeID = ", RoleTypeID _TuringUser = TuringRoleType.objects.get_or_create(RoleTypeID = RoleTypeID, RoleTypeName = RoleTypeName, DeletePermission = DeletePermission, PostPermission = PostPermission, SuperPermission = SuperPermission)[0] _TuringUser.save() ### main program if __name__ == '__main__': Population()
1. Django MySQL數據庫配置以及管理界面提交中文錯誤解決
-- 參考網址:http://www.linuxidc.com/Linux/2014-03/97955.htm
2. Python EOL while scanning string literal問題解決方法
-- 本文遇到的問題是由於使用vim在服務器上修改代碼時,出現字符串問題,從新上傳相關的代碼便可!
-- 參考網址:http://www.jb51.net/article/65067.htm
3.
-----------------------------------------------------------------------
參考網址:
1. 【mysql 經常使用操做】http://blog.csdn.net/lxh090821/article/details/9410943
2. 【mysql建立和刪除表】http://www.cnblogs.com/ggjucheng/archive/2012/11/03/2752082.html
3. 【mysql索引詳解(轉)】http://www.cnblogs.com/ggjucheng/archive/2012/11/04/2754128.html
-------------------------------------------------------------
【注】博文由本文通過實踐進一步整理,若有問題,還望指出,本人會及時糾正!謝謝^^
--------------------------------------------------------------