Django 环境下使用MySql数据库测试数据( day 1)

一、工程准备


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 makemigrations
python 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 |
+----+---------------+---------+------+-------------+----------+-----------+





















































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值