一、工程准备
1.创建虚拟环境:makevirtualenv Database
2.创建工程:
cd Database pip install django==1.11.4
pip install pymysql
django-admin startproject project
python3 manage.py startapp workap 3.启动mysql: mysql -u root -p
mysql>create database sunck;
mysql>show databases;
3.linux 环境进入PY charm安装目录./pycharm.sh
二、项目编程
project/__init__.py
import pymysql
pymysql.install_as_MySQLdb
project/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'workapp',
]
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':"sunck", 'USER':'root', 'PASSWORD':'steven', 'HOST':'localhost', 'PORT':'3306', }}
workapp.models.py
三、数据迁移python manage.py makemigrationspython manage.py migrate在migartions.001__initial.py
可以看到:
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2018-04-30 02:01
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Grades',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('gname', models.CharField(max_length=20)),
('gdate', models.DateTimeField()),
('ggirlnum', models.IntegerField()),
('gboynum', models.IntegerField()),
('isDelete', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='Students',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sname', models.CharField(max_length=20)),
('sgender', models.BooleanField(default=True)),
('sage', models.IntegerField()),
('scontend', models.CharField(max_length=20)),
('isDelete', models.BooleanField(default=False)),
('sgrade', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workapp.Grades')),
],
),
] 再次进入mysql: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sunck | | sys | +--------------------+ mysql> use sunck; Database changed
mysql> show tables; +----------------------------+ | Tables_in_sunck | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | django_admin_log | | django_content_type | | django_migrations | | django_session | | workapp_grades | | workapp_students | +----------------------------+mysql> desc workapp_grades; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | gname | varchar(20) | NO | | NULL | | | gdate | datetime(6) | NO | | NULL | | | ggirlnum | int(11) | NO | | NULL | | | gboynum | int(11) | NO | | NULL | | | isDelete | tinyint(1) | NO | | NULL | | +----------+-------------+------+-----+---------+----------------+ 6 rows in set (0.11 sec)
mysql> desc workapp_students; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | sname | varchar(20) | NO | | NULL | | | sgender | tinyint(1) | NO | | NULL | | | sage | int(11) | NO | | NULL | | | scontend | varchar(20) | NO | | NULL | | | isDelete | tinyint(1) | NO | | NULL | | | sgrade_id | int(11) | NO | MUL | NULL | | +-----------+-------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec)
mysql> 四、数据操作进入python shell 引入包:from workapp.models import Graddes,Students >>> from workapp.models import Grades,Students >>> from django.utils import timezone >>> from datetime import *查看所有数据:类名.objects.all>>> Grades.objects.all() <QuerySet []>添加数据:本质:创建一个模型类的对实例
>>> grade1=Grades() >>> grade1.gname ="python04">>> grade1.gdate=datetime(year=2018,month=4,day=30) >>> grade1.ggirlnum=15 >>> grade1.gboynum=20>>> grade1.save()
mysql> select * from workapp_grades; +----+----------+----------------------------+----------+---------+----------+ | id | gname | gdate | ggirlnum | gboynum | isDelete | +----+----------+----------------------------+----------+---------+----------+ | 1 | python04 | 2018-04-30 00:00:00.000000 | 15 | 20 | 0 | +----+----------+----------------------------+----------+---------+----------+
再次查看数据:>>> Grades.objects.all() <QuerySet [<Grades: Grades object>]>
为了显示舒适,更改models.py
class Grades(models.Model):
gname=models.CharField(max_length=20)
gdate=models.DateTimeField()
ggirlnum=models.IntegerField()
gboynum=models.IntegerField()
isDelete=models.BooleanField(default=False)
def __str__(self):
return "%s%d%d"%(self.gname,self.ggirlnum,self.gboynum)
重新进入shell>>>exit()>>> from workapp.models import Grades,Students >>> from django.utils import timezone >>> from datetime import * >>> >>> Grades.objects.all() <QuerySet [<Grades: python041520>]> 新增对象2>>> grade2=Grades() >>> grade2.gname="java" >>> grade2.gdate=datetime(year=2018,month=5,day=1) >>> >>> grade2.ggirlnum=20 >>> grade2.gboynum=40 >>> grade2.save()查看某个对象:类名.objects.get(pk=2) >>> Grades.objects.get(pk=2)
<Grades: java2040> 修改数据:模型对象.属性.新值 >>> grade2.gboynum=30 >>> grade2.save() 修改前 mysql> select * from workapp_grades; +----+----------+----------------------------+----------+---------+----------+ | id | gname | gdate | ggirlnum | gboynum | isDelete | +----+----------+----------------------------+----------+---------+----------+ | 1 | python04 | 2018-04-30 00:00:00.000000 | 15 | 20 | 0 | | 2 | java | 2018-05-01 00:00:00.000000 | 20 | 40 | 0 | +----+----------+----------------------------+----------+---------+--
修改后: mysql> select * from workapp_grades; +----+----------+----------------------------+----------+---------+----------+ | id | gname | gdate | ggirlnum | gboynum | isDelete | +----+----------+----------------------------+----------+---------+----------+ | 1 | python04 | 2018-04-30 00:00:00.000000 | 15 | 20 | 0 | | 2 | java | 2018-05-01 00:00:00.000000 | 20 | 30 | 0 |
+----+----------+---------- 删除数据:物理删除:模型对象.delete()
>>> grade2.delete() (1, {'workapp.Students': 0, 'workapp.Grades': 1})
>>>
添加学生
>>> stu=Students() >>> stu.sname="杨文静"//汉字出错了,请该为英文,以下同上 >>> stu.sgeder=False >>> stu.sage=20 >>> stu.scontend="我喜欢杨文静" >>> stu.sgrade =grade1 Traceback (most recent call last): File "<console>", line 1, in <module> NameError: name 'grade1' is not defined >>> grade1=Grades.objects.get(pk=1) >>> stu.sgrade =grade1
>>> stu.save() mysql> select * from workapp_students +----+---------------+---------+------+------------+----------+-----------+ | id | sname | sgender | sage | scontend | isDelete | sgrade_id | +----+---------------+---------+------+------------+----------+-----------+ | 1 | yangwenjing | 1 | 20 | I love her | 0 | 1 | | 2 | wangshangquan | 1 | 20 | I love her | 0 | 1 | +----+---------------+---------+------+------------+----------+-----------+
关联对象:获得关联对象的集合:需求:获取python04班所有学生 对象名.关联的类名小写_set.all() >>> grade1.students_set.all() <QuerySet [<Students: Students object>, <Students: Students object>]>
需求:创建小静属于pythono4班: >>> stus=grade1.students_set.create(sname="xiaojing",sgender=False,scontend=u"I love life",sage=45) 直接创建到数据库,无需stus.save()
+----+---------------+---------+------+-------------+----------+-----------+ | id | sname | sgender | sage | scontend | isDelete | sgrade_id | +----+---------------+---------+------+-------------+----------+-----------+ | 1 | yangwenjing | 1 | 20 | I love her | 0 | 1 | | 2 | wangshangquan | 1 | 20 | I love her | 0 | 1 | | 3 | xiaojing | 0 | 45 | I love life | 0 | 1 | +----+---------------+---------+------+-------------+----------+-----------+
|