python初試二
連線資料庫
Django為多種資料庫後臺提供了統一的呼叫API。根據需求不同,Django可以選擇不同的資料庫後臺。MySQL算是最常用的資料庫。我們這裡將Django和MySQL連線。
在Linux終端下啟動mysql:
$mysql -u root -p
在MySQL中創立Django專案的資料庫:
mysql> CREATE DATABASE villa DEFAULT CHARSET=utf8;
這裡使用utf8作為預設字符集,以便支援中文。
在MySQL中為Django專案創立使用者,並授予相關許可權:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON villa.* TO 'vamei'@'localhost' IDENTIFIED BY 'vameiisgood';
在settings.py中,將DATABASES物件更改為:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'villa',
'USER': 'vamei',
'PASSWORD': 'vameiisgood',
'HOST':'localhost',
'PORT':'3306',
}
}
後臺型別為mysql。上面包含資料庫名稱和使用者的資訊,它們與MySQL中對應資料庫和使用者的設定相同。Django根據這一設定,與MySQL中相應的資料庫和使用者連線起來。此後,Django就可以在資料庫中讀寫了。
創立模型
MySQL是關係型資料庫。但在Django的幫助下,我們不用直接編寫SQL語句。Django將關係型的表(table)轉換成為一個類(class)。而每個記錄(record)是該類下的一個物件(object)。我們可以使用基於物件的方法,來操縱關係型的MySQL資料庫。
在傳統的MySQL中,資料模型是表。在Django下,一個表為一個類。表的每一列是該類的一個屬性。在models.py中,我們建立一個只有一列的表,即只有一個屬性的類:
from django.db import models
class Character(models.Model):
name = models.CharField(max_length=200)
def __unicode__(self):
return self.name
類Character定義了資料模型,它需要繼承自models.Model。在MySQL中,這個類實際上是一個表。表只有一列,為name。可以看到,name屬性是字元型別,最大長度為200。
類Character有一個__unicode__()方法,用來說明物件的字元表達方式。如果是Python 3,定義__str__()方法,實現相同的功能。
命令Django同步資料庫。Django根據models.py中描述的資料模型,在MySQL中真正的建立各個關係表:
$python manage.py syncdb
同步資料庫後,Django將建立相關的MySQL表格,並要求你建立一個超級使用者:
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table west_character
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'tommy'): vamei
Email address: vamei@vamei.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
資料模型建立了。開啟MySQL命令列:
$mysql -u vamei -p
檢視資料模型:
USE villa;
SHOW TABLES;
SHOW COLUMNS FROM west_character;
最後一個命令返回Character類的對應表格:
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(200) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
可以看到,Django還自動增加了一個id列,作為記錄的主鍵(Primary Key)。
顯示資料
資料模型雖然建立了,但還沒有資料輸入。為了簡便,我們手動新增記錄。開啟MySQL命令列,並切換到相應資料庫。新增記錄:
INSERT INTO west_character (name) Values ('Vamei');
INSERT INTO west_character (name) Values ('Django');
INSERT INTO west_character (name) Values ('John');
檢視記錄:
SELECT * FROM west_character;
可以看到,三個名字已經錄入資料庫。
下面我們從資料庫中取出資料,並返回給http請求。在west/views.py中,新增檢視。對於對應的請求,我們將從資料庫中讀取所有的記錄,然後返回給客戶端:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from west.models import Character
def staff(request):
staff_list = Character.objects.all()
staff_str = map(str, staff_list)
return HttpResponse("<p>" + ' '.join(staff_str) + "</p>")
可以看到,我們從west.models中引入了Character類。透過操作該類,我們可以讀取表格中的記錄
為了讓http請求能找到上面的程式,在west/urls.py增加url導航:
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^staff/','west.views.staff'),
)
執行伺服器。在瀏覽器中輸入URL:
127.0.0.1:8000/west/staff
檢視效果:
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70026630/viewspace-3000339/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python Scrapy 爬蟲(二):scrapy 初試Python爬蟲
- 初試PythonPython
- python初試Python
- python初試七Python
- python初試三Python
- python初試四Python
- python初試五Python
- python初試六Python
- Python爬蟲初試Python爬蟲
- Python呼叫MySQL模組初試PythonMySql
- 初學Python(二)——陣列Python陣列
- 初試
- 初試python的socket程式設計--ftpPython程式設計FTP
- Python 快速教程(Django01):初試天涯PythonDjango
- [寒假學習筆記](二)Python初學筆記Python
- Kafka初試Kafka
- github 初試Github
- 初試 GithubGithub
- 初試Gevent – 高效能的Python併發框架Python框架
- python介面測試—post請求(二)Python
- 騰訊前端初試前端
- Rust: tokio初試Rust
- Vue + GraphQL初試Vue
- 初嘗試swiftSwift
- sqlite 小刀 初試SQLite
- 初識 webpack (二)Web
- spark初識二Spark
- mysql初識(二)MySql
- Python爬蟲初學二(網路資料採集)Python爬蟲
- 《JMeter實戰》第二章 效能測試初體驗 摘錄JMeter
- Accessability 專案初試
- Mybatis初體驗(二)MyBatis
- 初識 HTTP/2(二)HTTP
- Oracle VM初識(二)Oracle
- 初學PythonPython
- 初識pythonPython
- 2020年焊工(初級)考試試題及焊工(初級)考試軟體
- PHP 初級 試崗要求PHP