前言
各環(huán)境等的使用版本如下:
Linux Mint 18.2 (Ubuntu 16.04);
python版本2.7.12和3.5.2;
Django版本為1.9;
MySQL版本5.7.20。
Django 模型是與數(shù)據(jù)庫(kù)相關(guān)的,通過(guò)模型來(lái)操作數(shù)據(jù)庫(kù),與數(shù)據(jù)庫(kù)相關(guān)的代碼一般寫在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等數(shù)據(jù)庫(kù),只需要在settings.py中配置即可。Django 為這些數(shù)據(jù)庫(kù)提供了統(tǒng)一的調(diào)用API。 我們可以根據(jù)自己業(yè)務(wù)需求選擇不同的數(shù)據(jù)庫(kù)。MySQL 是 Web 應(yīng)用中最常用的數(shù)據(jù)庫(kù)。以下將以 MySQL 作為實(shí)例進(jìn)行介紹。
MySQL安裝
安裝
首先打開終端,然后執(zhí)行下面的三條命令完成安裝:
sudo apt-get install mysql-serversudo apt isntall mysql-clientsudo apt install libmysqlclient-dev
安裝成功后可以通過(guò)下面的命令測(cè)試是否安裝成功:
sudo netstat -tap | grep mysql
出現(xiàn)如下信息證明安裝成功:
然后執(zhí)行下述命令進(jìn)入MySQL服務(wù)shell:
mysql -uroot -p
在Enter password:后輸入你設(shè)置的密碼就可以進(jìn)入MySQL服務(wù),如下圖建立一個(gè)名叫demo的數(shù)據(jù)庫(kù),注意加分號(hào):
使用
打開終端,“ mysql -uroot -p”連接到數(shù)據(jù)庫(kù),然后你就可以建立數(shù)據(jù)庫(kù),建表,增刪改查一系列數(shù)據(jù)庫(kù)操作了。
然后在pycharm中就可以實(shí)現(xiàn)MySQL可視化了,打開后點(diǎn)擊View—>Tool Windows—>Database
在彈出的視圖里點(diǎn)擊如下的綠色+號(hào)—>Data Source—>MySQL,出現(xiàn)如下圖,然后填寫信息,點(diǎn)擊Test Connection測(cè)試連接,再點(diǎn)擊Apply就ok,剛開始需要在最下面點(diǎn)擊以下下載文件才能測(cè)試連接。
數(shù)據(jù)庫(kù)配置
文件配置
Django的模型版塊是可以實(shí)現(xiàn)根據(jù)模型建立數(shù)據(jù)庫(kù)表的,我們需要告訴Django使用哪一種數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)的用戶密碼等信息以連接數(shù)據(jù)庫(kù)。
打開第二層demo目錄下的settings.py文件并做修改(name為你的數(shù)據(jù)庫(kù)名稱,后面的參數(shù)就是你的數(shù)據(jù)庫(kù)配置的用戶名、密碼和端口信息了):
# Database# https://docs.djangoproject.com/en/1.9/ref/settings/#databasesDATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'demo', 'USER':'root', 'PASSWORD':'password', 'HOST':'localhost', 'PORT':'3306', }}
首先你得建一個(gè)數(shù)據(jù)庫(kù)名為demo,打開終端,輸入“mysql -uroot -p”輸入密碼進(jìn)入mysql服務(wù)shell,然后創(chuàng)建數(shù)據(jù)庫(kù)(注意如果你得數(shù)據(jù)庫(kù)要存漢字,那就加上后面的參數(shù),是utf8不是utf-8也不是utf_8):
create database demo default charset=utf8;
app模型完成
到這里我們可以不用在終端上用mysql服務(wù)創(chuàng)建表,django的模型會(huì)自動(dòng)的操作表,所以我們只需要寫好模型就行了。
我們?cè)谥敖⒌拿麨閘ogin的app中完成模型,在login目錄下的models.py中修改為如下:
# _*_ coding:utf-8 _*_from __future__ import unicode_literalsfrom django.db import models# Create your models here.class Types(models.Model): name = models.CharField(max_length=20) types = models.IntegerField(default=4) def __str__(self): return self.nameclass Members(models.Model): name = models.CharField(max_length=20) sex = models.CharField(max_length=2) age = models.IntegerField(null=True) TEL = models.CharField(max_length=11) nickname = models.CharField(max_length=20) password = models.CharField(max_length=15) # create_time = models.DateTimeField() member_type = models.ForeignKey(Types) def __str__(self): return self.name
我們新建了一個(gè)Types類和Members類,都繼承自models.Model, 一個(gè)成員有姓名、年齡、性別、注冊(cè)昵稱、登錄密碼、成員類型;一個(gè)類型包括了類型名稱和類型編號(hào)(比如超級(jí)管理員、管理員、會(huì)員、普通成員、游客等類型,每個(gè)類型都對(duì)應(yīng)一個(gè)編號(hào))。繼承自models.Model的類,django都會(huì)將其同步到數(shù)據(jù)庫(kù),每個(gè)類在數(shù)據(jù)庫(kù)中對(duì)應(yīng)一個(gè)表。
到這里我們還得做一件事,那就是安裝pymsql,打開終端(你python用哪一個(gè)版本就安裝哪一個(gè)):
sudo pip install pymysqlsudo pip3 install pymysql
然后打開login應(yīng)用下的init.py文件,添加如下語(yǔ)句:
import pymysqlpymysql.install_as_MySQLdb()
目的是告訴django把pymysql當(dāng)做MySQLdb來(lái)使用,如果不添加這個(gè)會(huì)報(bào)找不到MySQLdb的錯(cuò)誤,當(dāng)然你也可以安裝MySQLdb,但是不建議,因?yàn)镸ySQLdb已經(jīng)不更新維護(hù)了。
這里用到了兩種Field,F(xiàn)ield類型后面章節(jié)再講述。
然后將login應(yīng)用下的views.py文件修改如下:
# _*_ coding:utf-8 _*_from django.shortcuts import render# Create your views here.from login import modelsdef home(request): context = {} models.Types.objects.create(name='超級(jí)管理員', types=0) type = models.Types.objects.get(pk=1) models.Members.objects.create(nickname='超級(jí)管理員', password='admin1234', member_type=type) models.Types.objects.create(name='管理員', types='1') type = models.Types.objects.get(pk=2) models.Members.objects.create(nickname='管理員', password='admin1111', member_type=type) models.Types.objects.create(name='導(dǎo)師', types='2') type = models.Types.objects.get(pk=3) models.Members.objects.create(name='張華', sex='女', age='18', TEL='13524654287', nickname='芳@華', password='zh.1998@1204', member_type=type) models.Types.objects.create(name='成員', types='3') type = models.Types.objects.get(pk=4) models.Members.objects.create(name='李楠', sex='女', age='19', TEL='13425158478', nickname='南方南', password='LN.axp231', member_type=type) models.Types.objects.create(name='游客', types='4') type = models.Types.objects.get(pk=5) models.Members.objects.create(name='徐浩', sex='男', age='18', TEL='15234585461', nickname='背手', password='pa7nan2.@#', member_type=type) return render(request, 'home.html', context)def login(request): context = {} return render(request, 'login.html', context)
上述的關(guān)于模型操作的models.Types.objects.create()和models.Types.objects.get()等將在后面章節(jié)做學(xué)習(xí)。
同步數(shù)據(jù)庫(kù)
現(xiàn)在就可以將django的login應(yīng)用模型同步到mysql數(shù)據(jù)庫(kù)了,還記得在運(yùn)行項(xiàng)目的時(shí)候出現(xiàn)的紅色的:
You have unapplied migrations; your app may not work properly until they are applied.Run 'python manage.py migrate' to apply them.
那是因?yàn)闆](méi)有同步數(shù)據(jù)庫(kù)的原因,當(dāng)時(shí)沒(méi)有用到就沒(méi)管,現(xiàn)在我們用終端進(jìn)入到項(xiàng)目的路徑,執(zhí)行下面兩條命令同步所有在settings.py中的INSTALLED_APPS中配置的應(yīng)用的模型到mysql數(shù)據(jù)庫(kù)(注意路徑,要運(yùn)行manage.py就得到它所在目錄,如果你想用python3就用后面的命令,不用去切換默認(rèn)的python版本):
# python2執(zhí)行python manage.py makemigrationspython manage.py migrate# python3執(zhí)行python3 manage.py makemigrationspython3 manage.py migrate
然后你就可以看到數(shù)據(jù)庫(kù)中多了很多個(gè)表(包括django默認(rèn)的還有我們模型中的兩個(gè)表,一個(gè)為login_members,另一個(gè)為login_types,不用說(shuō)你也能看出來(lái)djanggo同步數(shù)據(jù)庫(kù)表的命名規(guī)則是:appName_tableName)
我們?cè)诮K端運(yùn)行項(xiàng)目(前面章節(jié)講了這里就不贅述怎么運(yùn)行了,至于是要用python2還是python3自己選,和上面一樣,不要去修改默認(rèn)的python版本),打開鏈接,然后查看數(shù)據(jù)庫(kù)的login_members和login_types兩個(gè)表,會(huì)發(fā)現(xiàn)內(nèi)容寫進(jìn)去了。
可以用pycharm查看表,如下圖:
也可以在終端用mysql服務(wù)查看,注意每一個(gè)語(yǔ)句都要在后面加分號(hào):
最后講一下在終端結(jié)束mysql服務(wù)的快捷鍵ctr+d,結(jié)束django項(xiàng)目的快捷鍵ctr+c。
聯(lián)系客服