Django ORM------Mysql
ORM操作
select * from tb where id > 1
#對應關系
models.tb.objects.filter(id__gt=1)
models.tb.objects.filter(id=1)
models.tb.objects.filter(id__lt=1)
創建類
1.DB-first:根據類自動創建數據庫表
#models.py
settings.py中要註冊app
默認生成的表名為:#app01_userinfo
from django.db import models #create your models here. class UserInfo(models.Model):View Code#django會默認創建一個id列,自增,主鍵 #用戶名列,字符串類型,指定長度 username = models.CharField(max_length=32) password = models.CharField(max_length=64) 項目的settings->INSTALLED_APPS=[]中,添加app,如圖: 然後命令行執行: python manage.py makemigrations python manage.py migrate #根據生成的py文件,直接生成數據庫
項目settings.py->DATABASE={}中設置使用的數據庫:默認連接sqlite
連接mysql配置文件:
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘:‘dbname‘, ‘USER‘: ‘root‘, ‘PASSWORD‘: ‘xxx‘, ‘HOST‘: ‘‘, ‘PORT‘: ‘‘, } }View Code
***********註意***********
Django默認用Mysqldb模塊連接mysql,所以會報錯,應該修改為pymysql連接
在項目的__init__.py文件中,添加: import pymysql pymysql.install_as_MySQLdb()
2.Code-first:根據類對數據庫表中的數據進行各種操作
一、概述
1、什麽是數據庫 ?
答:數據的倉庫,如:在ATM的示例中我們創建了一個 db 目錄,稱其為數據庫
2、什麽是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?
答:他們均是一個軟件,都有兩個主要的功能:
- a. 將數據保存到文件或內存
- b. 接收特定的命令,然後對文件進行相應的操作
PS:如果有了以上軟件,無須自己再去創建文件和文件夾,而是直接傳遞 命令 給上述軟件,讓其來進行文件操作,他們統稱為數據庫管理系統(DBMS,Database Management System)
3、什麽是SQL ?
答:上述提到MySQL等軟件可以接受命令,並做出相應的操作,由於命令中可以包含刪除文件、獲取文件內容等眾多操作,對於編寫的命令就是是SQL語句。SQL????????,是????????????????????????????結構化語言(Structured Query Language????????)的縮寫,SQL????????????????????????????????是一種專門用來與數據庫通信的語言。
二、下載安裝
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下公司。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。
想要使用MySQL來存儲並操作數據,則需要做幾件事情:
a. 安裝MySQL服務端
b. 安裝MySQL客戶端
b. 【客戶端】連接【服務端】
c. 【客戶端】發送命令給【服務端MySQL】服務的接受命令並執行相應操作(增刪改查等)
下載 http://dev.mysql.com/downloads/mysql/ 安裝 windows: 點點點 Linux: yum install mysql-server Mac: 點點點
Window版本
1、下載
MySQL Community Server 5.7.16 http://dev.mysql.com/downloads/mysql/View Code
2、解壓
如果想要讓MySQL安裝在指定目錄,那麽就將解壓後的文件夾移動到指定目錄,如:C:\mysql-5.7.16-winx64
3、初始化
MySQL解壓後的 bin 目錄下有一大堆的可執行文件,執行如下命令初始化數據:
cd c:\mysql-5.7.16-winx64\bin mysqld --initialize-insecureView Code
4、啟動MySQL服務
執行命令從而啟動MySQL服務
# 進入可執行文件目錄 cd c:\mysql-5.7.16-winx64\bin # 啟動MySQL服務 mysqldView Code
5、啟動MySQL客戶端並連接MySQL服務
由於初始化時使用的【mysqld --initialize-insecure】命令,其默認未給root賬戶設置密碼
# 進入可執行文件目錄 cd c:\mysql-5.7.16-winx64\bin # 連接MySQL服務器 mysql -u root -p # 提示請輸入密碼,直接回車
輸入回車,見下圖表示安裝成功:
到此為止,MySQL服務端已經安裝成功並且客戶端已經可以連接上,以後再操作MySQL時,只需要重復上述4、5步驟即可。但是,在4、5步驟中重復的進入可執行文件目錄比較繁瑣,如想日後操作簡便,可以做如下操作。
a. 添加環境變量
將MySQL可執行文件添加到環境變量中,從而執行執行命令即可
【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名為Path 的一行,雙擊】 --> 【將MySQL的bin目錄路徑追加到變值值中,用 ; 分割】 如: C:\Program Files (x86)\Parallels\Parallels Tools\Applications;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Python27;C:\Python35;C:\mysql-5.7.16-winx64\bin
如此一來,以後再啟動服務並連接時,僅需:
# 啟動MySQL服務,在終端輸入 mysqld # 連接MySQL服務,在終端輸入: mysql -u root -p
b. 將MySQL服務制作成windows服務
上一步解決了一些問題,但不夠徹底,因為在執行【mysqd】啟動MySQL服務器時,當前終端會被hang住,那麽做一下設置即可解決此問題:
# 制作MySQL的Windows服務,在終端執行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --install # 移除MySQL的Windows服務,在終端執行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --remove
註冊成服務之後,以後再啟動和關閉MySQL服務時,僅需執行如下命令:
# 啟動MySQL服務 net start mysql # 關閉MySQL服務 net stop mysql
Linux版本
安裝:
1 |
yum install mysql - server
|
服務端啟動
1 |
mysql.server start
|
客戶端連接
1 2 3 4 5 6 7 |
連接:
mysql -h host -u user -p
常見錯誤:
ERROR 2002 (HY000): Can ‘t connect to local MySQL server through socket ‘ /tmp/mysql.sock‘ (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.
退出:
QUIT 或者 Control+D
|
三、數據庫操作
1、顯示數據庫
1 |
SHOW DATABASES;
|
默認數據庫:
mysql - 用戶權限相關數據
test - 用於用戶測試數據
information_schema - MySQL本身架構相關數據
2、創建數據庫
1 2 3 4 5 |
# utf-8
CREATE DATABASE 數據庫名稱 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
# gbk
CREATE DATABASE 數據庫名稱 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
|
3、使用數據庫
1 |
USE db_name;
|
顯示當前使用的數據庫中所有表:SHOW TABLES;
4、用戶管理
1 2 3 4 5 6 7 8 9 10 |
創建用戶
create user ‘用戶名‘ @ ‘IP地址‘ identified by ‘密碼‘ ;
刪除用戶
drop user ‘用戶名‘ @ ‘IP地址‘ ;
修改用戶
rename user ‘用戶名‘ @ ‘IP地址‘ ; to ‘新用戶名‘ @ ‘IP地址‘ ;;
修改密碼
set password for ‘用戶名‘ @ ‘IP地址‘ = Password( ‘新密碼‘ )
PS:用戶權限相關數據保存在mysql數據庫的user表中,所以也可以直接對其進行操作(不建議)
|
5、授權管理
1 2 3 |
show grants for ‘用戶‘ @ ‘IP地址‘ -- 查看權限
grant 權限 on 數據庫.表 to ‘用戶‘ @ ‘IP地址‘ -- 授權
revoke 權限 on 數據庫.表 from ‘用戶‘ @ ‘IP地址‘ -- 取消權限
|
Django ORM------Mysql