菜单

django MVC方式 数据库的操作mysql

2019年5月4日 - 金沙编程资讯

1. Django安装

[root@HappyLau ~]# pip install django==1.8.

介绍:本节课大家承继学习djangoWEB框架的支付,那节课重倘若读书怎样访问数据库,django怎么着自动为我们成立好表结构等相关内容。

壹.2个模型类代表数据库中的1个表,2个模型类的实例代表这么些数据库表中的一条特定的记录。

贰. 创立项目

[root@HappyLau html]# django-admin startproject demo

查看项目的结构:
[root@HappyLau html]# tree demo/
demo/
├── demo
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
└── manage.py

1 directory, 7 files

demo目录文件说明:
__init__.py        代表是一个包
settings.py        配置文件,环境设定
urls.py               urls地址映射关系
wsgi.py             wsgi.py设定,django是遵循WSGI协议的框架

启动django web服务器,运行python manage.py runserver,然后django会默认运行在本机的8000/tcp端口,然后可以通过浏览器访问。如下图:

图片 1

如供给普通话,能够修改django帮衬普通话景况,编辑settings.py文件,设定内容如下:

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

  Django 自称是“最适合开辟有限制时间的无所不包WEB框架”。本文参考《Django
web开采指南》,火速搭建2个blog
出来,在中等涉及众多知识点,这里不会详细表明,纵然您是第一遍接触Django
,本文少禽让你在感性上对Django有个认识,完开销文操作后会让您有意思味阅读的连锁书籍和文书档案。

 

二.管理器和查询集。

三. 布局数据库

  Django暗中同意选拔sqllite3数据库作为数据持久存款和储蓄,实际职业中貌似选取MySQL作为结构化数据存储,在python2中采取python-MySQL作为python和MySQL数据库交互的API,而python三中运用pymysql,且不扶助python-MySQL,所以以pymysql作为重头戏使用,需求在品种/应用的__init__.py文件中定义使用如下:

[root@HappyLau demo]# cat demo/__init__.py
import pymysql
pymysql.install_as_MySQLdb()
  1. 安装MySQL数据库和pymysql模块

    root@HappyLau demo]# yum install mariadb mariadb-server python2-PyMySQL -y

    修改玛丽亚DB的私下认可字符集,修改server端
    [root@HappyLau demo]# vim /etc/my.cnf.d/server.cnf
    [server]
    character-set-server=utf8

    # this is only for the mysqld standalone daemon
    [mysqld]
    character-set-server=utf8

    修改client端:
    [root@HappyLau demo]# vim /etc/my.cnf.d/client.cnf
    [client]
    default-character-set=utf8

    运行数据库:
    [root@HappyLau demo]# systemctl restart mariadb
    [root@HappyLau demo]# systemctl enable mariadb

  2. 数据库景况筹算

    MariaDB [(none)]> create database book;
    Query OK, 1 row affected (0.01 sec)
    MariaDB [(none)]>
    MariaDB [(none)]> grant all privileges on book.* to ‘bookadmin’@’localhost’ identified by ‘bookpassword’;
    Query OK, 0 rows affected (0.04 sec)

    MariaDB [(none)]> flush privileges;
    Query OK, 0 rows affected (0.02 sec)

叁.
布置Django数据库连接,修改settings.py文件,找到DATABASES行,修改内容如下:

DATABASES = { 
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'localhost',
        'PORT': 3306,
        'USER': 'bookadmin',
        'PASSWORD': 'bookpassword',
        'NAME': 'book'
    }   
}

废话少说,come on!!

一、首先大家开荒settings.py找到DATABASES关键字,这个是布局大家的数据库。

4.  创办和管理应用

  1. 创造应用

    [root@HappyLau demo]# django-admin startapp book

    查看应用目录结构:
    [root@HappyLau demo]# tree book/
    book/
    ├── admin.py
    ├── init.py
    ├── migrations
    │   └── init.py
    ├── models.py
    ├── tests.py
    └── views.py

    1 directory, 6 files

2.
将选用注册到django中,修改项目标settings.py文件,找到INSTALLED_应用软件S行,将book应用增加到内部,如下:

INSTALLED_APPS = ( 
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'book'
)

本操作的景况:

图片 2

三.成立、改换,并保存三个实例

四. 编纂应用模型

一.
定义模型的类,在每一个应用包目录下的models.py文件中定义,如book应用的的book/models.py文件,定义三个模型:书本和大胆模型,在这之中书本作为英雄的外键而存在,要是有八个使用则在个别的运用中定义模型就可以,定义如下:

[root@HappyLau demo]# cat book/models.py 
#_*_ coding:utf8 _*_

from django.db import models

class Book(models.Model):
    '''
    @models.Model,定义Book数据库models类
    '''
    book_name = models.CharField(max_length=128)
    author_name = models.CharField(max_length=128)
    publish_date = models.DateTimeField()

    def __str__(self):
        '''格式化输出'''
        return self.book_name,self.author_name,self.publish_date

class Hero(models.Model):
    '''
    @models.Model,定义超人Hero数据库models类
    '''
    hero_name = models.CharField(max_length=128)
    hero_sex = models.BooleanField()
    hero_content = models.CharField(max_length=1024)
    hero_book = models.ForeignKey(Book)

    def __str__(self):
        '''格式化输出'''
        return self.hero_name,self.hero_sex,self.hero_content,self.hero_book
  1. 变化模型所需的表

    [root@HappyLau demo]# python manage.py makemigrations
    Migrations for ‘book’:
    0001_initial.py:

     - Create model Book
     - Create model Hero
    

    [root@HappyLau demo]# python manage.py migrate
    Operations to perform:
      Synchronize unmigrated apps: staticfiles, messages
      Apply all migrations: admin, contenttypes, book, auth, sessions
    Synchronizing apps without migrations:
      Creating tables…
        Running deferred SQL…
      Installing custom SQL…
    Running migrations:
      Rendering model states… DONE
      Applying contenttypes.0001_initial… OK
      Applying auth.0001_initial… OK
      Applying admin.0001_initial… OK
      Applying contenttypes.0002_remove_content_type_name… OK
      Applying auth.0002_alter_permission_name_max_length… OK
      Applying auth.0003_alter_user_email_max_length… OK
      Applying auth.0004_alter_user_username_opts… OK
      Applying auth.0005_alter_user_last_login_null… OK
      Applying auth.0006_require_contenttypes_0002… OK
      Applying book.0001_initial… OK
      Applying sessions.0001_initial… OK

3.
翻看模型的表格,施行migrate之后,在运用的migrations目录下生成制造SQL语句的文书,如下为目录的组织,并查阅文件内容,如下:

[root@HappyLau demo]# tree 
.
├── book
│   ├── admin.py
│   ├── admin.pyc
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── migrations
│   │   ├── 0001_initial.py     #新增的创建SQL语句的文件
│   │   ├── 0001_initial.pyc
│   │   ├── __init__.py
│   │   └── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── tests.py
│   └── views.py
├── demo
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
└── manage.py

查看 0001_initial.py文件内容,如下:
[root@HappyLau demo]# cat book/migrations/0001_initial.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Book',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('book_name', models.CharField(max_length=128)),
                ('author_name', models.CharField(max_length=128)),
                ('publish_date', models.DateTimeField()),
            ],
        ),
        migrations.CreateModel(
            name='Hero',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('hero_name', models.CharField(max_length=128)),
                ('hero_sex', models.BooleanField()),
                ('hero_content', models.CharField(max_length=1024)),
                ('hero_book', models.ForeignKey(to='book.Book')),
            ],
        ),
    ]

经过地点的文本能够开掘,通过models类创造数据模型的时候会在数据库中自动生成id字段,该id字段是主键primary_key,且是自增auto_created。如下通过查看数据库的表结构,如下:

MariaDB [book]> show create table book_book ;
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                                                                 |
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| book_book | CREATE TABLE `book_book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `book_name` varchar(128) NOT NULL,
  `author_name` varchar(128) NOT NULL,
  `publish_date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [book]> show create table book_hero ;+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| book_hero | CREATE TABLE `book_hero` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hero_name` varchar(128) NOT NULL,
  `hero_sex` tinyint(1) NOT NULL,
  `hero_content` varchar(1024) NOT NULL,
  `hero_book_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `book_hero_hero_book_id_766a63d04ebcda8c_fk_book_book_id` (`hero_book_id`),
  CONSTRAINT `book_hero_hero_book_id_766a63d04ebcda8c_fk_book_book_id` FOREIGN KEY (`hero_book_id`) REFERENCES `book_book` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  1. 利用django
    shell测试数据模型,django的manage.py提供二个shell工具和数据模型交互的接口,能够达成直接与数据库交互,如下:

    [root@HappyLau demo]# python manage.py shell
    Python 2.7.5 (default, Aug 4 2017, 00:39:18)
    [GCC 四.捌.五 二零一六06二3 (Red Hat 4.捌.5-1陆)] on linux2 Type “help”, “copyright”, “credits” or “license” for more information.
    (InteractiveConsole)
    #插入数据(实际实行了INSERT语句)

    from book.models import Book
    from book.models import Hero
    b = Book()
    b.book_name = “天龙拾捌部”
    b.author = “Louis Cha”
    b.publish_date = “2018-03-17”
    b.save()

    b1 = Book()
    b1.book_name = “射雕英豪传”
    b一.author = “Louis Cha”
    b一.publish_date = “2018-03-17”
    b1.save()

    外键数据插入:

    h = Hero()
    h.hero_name = “乔峰”
    h.hero_sex = “男”
    h.hero_content = “乔戈里峰是1个大硬汉,具备盖世武术,如降龙108掌,擒龙手等。”
    h.hero_book = b
    b.save()

    h1 = Hero()
    h1.hero_name = “郭靖”
    h1.hero_sex = “男”
    h1.hero_content = “张琳芃是个傻大个,但武功高强,肯学,努力!”
    h1.hero_book = b1
    h1.save()

    查询数据具备数据(实际推行了SELCT语句):

    Book.objects.all()
    [, ]
    Hero.objects.all()
    [, ]

    依照规则查询数据,如基于主键查询(pk是primary_key)

    Book.objects.get(pk=1)

    Book.objects.get(book_name=”射雕壮士传”)

    更新数据(实际是推行了UPDATE语句):

    book = Book.objects.get(pk=1)
    from datetime import datetime
    book.publish_date
    datetime.datetime(2018, 3, 17, 0, 0, tzinfo=)
    book.publish_date = datetime(year=1997,month=1,day=1)
    book.save()
    /usr/lib64/python2.7/site-packages/django/db/models/fields/init.py:1474: RuntimeWarning: DateTimeField Book.publish_date received a naive datetime (1997-01-01 00:00:00) while time zone support is active.
    RuntimeWarning)

    book.publish_date
    datetime.datetime(1997, 1, 1, 0, 0)

    删除数据(实际实施了DELETE语句):

    hero = Hero.objects.get(hero_name=’郭靖’)
    hero.delete()
    Hero.objects.all()
    []
    hero.save()

    最后查看数据库中的内容:
    玛丽亚DB [book]> select * from book_book;
    +—-+—————–+————-+———————+
    | id | book_name       | author_name | publish_date        |
    +—-+—————–+————-+———————+
    |  一 | 天龙108部      |             | 一9玖陆-0壹-0壹 00:00:00 |
    |  二 | 射雕铁汉传      |             | 201捌-0三-1七 00:00:00 |
    +—-+—————–+————-+———————+
    贰 rows in set (0.00 sec)

    MariaDB [book]> select * from book_hero;
    +—-+———–+———-+————————————————————————————–+————–+
    | id | hero_name | hero_sex | hero_content                                                                         | hero_book_id |
    +—-+———–+———-+————————————————————————————–+————–+
    |  三 | 乔戈里峰      |        1 | 乔戈里峰是多少个大大侠,具有盖世武术,如降龙十八掌,擒龙手等。                             |            壹 |
    |  四 | 曹永竞      |        1 | 刘殿座是个傻大个,但武术高强,肯学,努力!                                              |            2 |
    +—-+———–+———-+————————————————————————————–+————–+
    2 rows in set (0.00 sec)

===================

里面包车型地铁质量不做牵线了,一看就懂了。

 from blog.models import Blog
 b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
 b.save()
 b.name = 'New name'
 b.save()

 五.  后台数据管理

web应用中,通过web站点将数据表现给用户,那个所出示的数据最后存款和储蓄在后台数据中,即供给经过2个后台管理来达成用户数量的增加/删除等操作,django暗中同意提供了贰个admin的管制后台,并提供了相关的用户管理机制,能够透过createsuperuser一流管理员账户,也得以将用户所属的选取增多到后新北管理,如下:

壹.
创办管理用户,创造完管理用户之后能够经过拜访

[root@HappyLau demo]# python manage.py  createsuperuser
Username (leave blank to use 'root'): happylau
Email address: happylau@cnblogs.com
Password: 
Password (again): 
Superuser created successfully.

二.
登记应用到后台,即经过刚所创设的多少个模型:Book模型和Hero模型通过后台的方法管理,由于设计到普通话输入,所以需求通过sys.setdefaultencoding(‘utf八’)的办法来设定字符编码,代码如下:

[root@HappyLau demo]# cat book/admin.py
import sys
reload(sys)
sys.setdefaultencoding('utf8')

from django.contrib import admin
from book.models import Book
from book.models import Hero

admin.site.register(Book)
admin.site.register(Hero)

由此走访

图片 3

增多书消息:

图片 4

加上铁汉:

图片 5

Windows 7/10

2、增添本身的四个startapp polls,并在settings中布局。

  注意:在调用b.save()时,Django才正真访问数据库。

陆. 自定义管理页面

  暗许时候django只现实models中类的音信,能够经过django中的ModelAdmin类来自定义数据的显示,其中list_display列表能够定义须求显示的字段内容,以如下代码为例:

[root@HappyLau demo]# cat book/admin.py
#_*_ coding:utf8 _*_

import sys
reload(sys)
sys.setdefaultencoding('utf8')

from django.contrib import admin
from book.models import Book
from book.models import Hero

class BookAdmin(admin.ModelAdmin):
    '''
    定义Book管理需要显示的内容
    '''
    list_display = ['id','book_name','author_name','publish_date']

class HeroAdmin(admin.ModelAdmin):
    '''
    定义Hero管理需要现实的内容
    '''
    list_display = ['id','hero_name','hero_sex','hero_content','hero_book']

admin.site.register(Book,BookAdmin)
admin.site.register(Hero,HeroAdmin)

修改产生后,django页面包车型大巴有关Hero内容显示如下,显示内容一般不错,哈哈!其它,在此间还协助字段的排序,只需求点击字段中的内容就能够完毕排序。

图片 6

管理类中的别的职能:

1.
list_display  用于体现列表的内容,作为四个列表而选择,如list_display
= [‘id’,’book_name’,’author_name’,’publish_date’]

  1. list_filter   用于在右测展现分组内容,如list_filter =
    [‘book_name’]

  2. search_田野同志s  用于地点的关键字查询,扶助模糊查询,如search_fields
    = [‘id’,’book_name’,’author_name’,’publish_date’]

  3. list_per_page  用于安装分页,每页所包容的条条框框,如list_per_page =
    5

正如实当代码:

[root@HappyLau demo]# cat book/admin.py
#_*_ coding:utf8 _*_

import sys
reload(sys)
sys.setdefaultencoding('utf8')

from django.contrib import admin
from book.models import Book
from book.models import Hero

class BookAdmin(admin.ModelAdmin):
    '''
    定义Book管理需要显示的内容
    '''
    list_display = ['id','book_name','author_name','publish_date']
    list_filter = ['book_name']    
    search_fields = ['id','book_name','author_name','publish_date']
    list_per_page = 5 

class HeroAdmin(admin.ModelAdmin):
    '''
    定义Hero管理需要现实的内容
    '''
    list_display = ['id','hero_name','hero_sex','hero_content','hero_book']
    search_fields = ['id','hero_name','hero_sex','hero_content','hero_book']
    list_filter = ['hero_name']
    list_per_page = 5 

admin.site.register(Book,BookAdmin)
admin.site.register(Hero,HeroAdmin)

由此地点的代码完毕的机能如图:

图片 7

精心观察上如,list_display完毕表格中的数据内容,list_filter完成右侧的分组内容,search_田野同志s落成上部的探求成效,list_per_page呈现每页展现内容。

python 2.7

图片 8

  也能够行使管理器的create方法,一步创造和封存。

7. 内嵌页的完成

  要是希望在二个类中隐含嵌套别的二个Class,能够动用嵌套的章程来贯彻,能够依赖三种格局贯彻:admin.StackedInline和admin.TabularInline,如下为测试代码:

[root@HappyLau demo]# cat book/admin.py
#_*_ coding:utf8 _*_

import sys
reload(sys)
sys.setdefaultencoding('utf8')

from django.contrib import admin
from book.models import Book
from book.models import Hero

#class HeroInline(admin.StackedInline):
class HeroInline(admin.TabularInline):
    '''
    Hero类的内嵌页类
    '''
    model = Hero
    extra = 2

class BookAdmin(admin.ModelAdmin):
    '''
    定义Book管理需要显示的内容
    '''
    list_display = ['id','book_name','author_name','publish_date']
    list_filter = ['book_name']    
    search_fields = ['id','book_name','author_name','publish_date']
    list_per_page = 5 
    fieldsets = [
        ("基本信息",{ 'fields': [ 'book_name'] }),
        ("书本更多",{ 'fields': [ 'author_name','publish_date' ]})
    ]
    inlines = [HeroInline]


class HeroAdmin(admin.ModelAdmin):
    '''
    定义Hero管理需要现实的内容
    '''
    list_display = ['id','hero_name','hero_sex','hero_content','hero_book']
    search_fields = ['id','hero_name','hero_sex','hero_content','hero_book']
    list_filter = ['hero_name']
    list_per_page = 5 
    fieldsets = [
        ("基本信息", {'fields': [ 'hero_name','hero_sex' ]}),
        ("英雄更多", {'fields': [ 'hero_content','hero_book' ]})
    ]

admin.site.register(Book,BookAdmin)
admin.site.register(Hero,HeroAdmin)

能够兑今后改动/增加页面中,效果如下:

图片 9

待续…

人天性懒惰,能摆平懒惰者,少,能长日子持之以恒者,越来越少!

Django 1.8.2

也得以一贯写’polls’

p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

===================

三、张开大家正好成立的采纳polls –>models.py内容如下:

始建筑工程程

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.

class Test(models.Model):

    name = models.CharField(max_length=20)

解释:
以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),
数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

  能够选用update() 方法为二个查询集中负有目的的某部字段都设置四个特定的值。

创制mysite工程项目:

4、在pycharm中运行manage.py

# Update all the headlines with pub_date in 2007.
Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')

D:/djpy> django-admin.py startproject mysite

图片 10

肆.获得对象(大很多情形下,供给从数据库中检索对象时,会选用all()、 get()filter() 和exclude()。 然则,那只是冰山一角;查询集形式的完好列表,请参见查询集API
参考

工程目录结构:

 

manage.py —– Django项目里面包车型客车工具,通过它能够调用django
shell和数据库等。

 成功前面世:

  all()方式重回包涵数据库中兼有目的的三个查询集

settings.py —-
包涵了项目标默许设置,包涵数据库新闻,调节和测试标志以及别的一些干活的变量。

图片 11

urls.py —– 负担把U汉兰达L格局映射到应用程序。

大家实行叁条命令如下:

  差不离有二十多样查询的类型。查询条件中钦赐的字段必须是模型字段的称呼。但有多个例外,对于ForeignKey您能够动用字段名加上_id 后缀。

创建blog应用

# 创建表结构(内置的django表结构)
Entry.objects.filter(blog_id=4)

在mysite目录下开创blog应用

manage.py@pythondjango
> migrate

D:\PyCharm\bin\runnerw.exe D:\Python\python.exe
D:\PyCharm\helpers\pycharm\django_manage.py migrate
D:/pythondjango
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying sessions.0001_initial… OK

D:/pydj> cd mysite

Process finished with exit code 0

 那种超过能够是自由的纵深。它还足以反向专门的学业。若要引用3个“反向”的涉及,只必要动用该模型的小写的称谓。

D:/djpy/mysite$ python manage.py startapp blog

让 Django 知道我们在我们的模型有一些变更,生成一个文件
Blog.objects.filter(entry__headline__contains='Lennon')

目录结构:

manage.py@pythondjango
> makemigrations polls

D:\PyCharm\bin\runnerw.exe D:\Python\python.exe
D:\PyCharm\helpers\pycharm\django_manage.py makemigrations polls
D:/pythondjango
Migrations for ‘polls’:
polls\migrations\0001_initial.py

初步化admin后台数据库

  假诺未有结果满意查询,get() 将吸引2个DoesNotExist 至极。类似地,若是有多条记下知足get() 的询问条件,Django
也将报错。那种意况将掀起MultipleObjectsReturned异常。

  python
自带SQLite数据库,Django帮忙各类主流的数据库,这里为了便于推荐使用SQLite,假诺使用此外数据库请在settings.py文件中装置。

图片 12

切换成mysite成立数据库:

文本内容是:

  通常,查询集 的切成块重回三个新的查询集 ——
它不会执行查询。有二个例外,是只要您采用Python
切条语法中”step”参数。

D:/djpy/mysite$ python manage.py syncdb

# -*- coding: utf-8 -*-
# Generated by Django 1.11.3 on 2017-07-21 09:15
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Test',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=20)),
            ],
        ),
    ]

其实里面记录了数据库的一些变化

C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py:24:
RemovedInDjango19Warning: The syncdb command will be removed in Django
1.9

manage.py@pythondjango
> migrate polls

D:\PyCharm\bin\runnerw.exe D:\Python\python.exe
D:\PyCharm\helpers\pycharm\django_manage.py migrate polls
D:/pythondjango
Operations to perform:
Apply all migrations: polls
Running migrations:
Applying polls.0001_initial… OK

>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(average_price=Avg('price'), Max('price'), Min('price'))
{'average_price': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}

warnings.warn(“The syncdb command will be removed in Django 1.9”,
RemovedInDjango19Warning)

Process finished with exit code 0

Operations to perform:

表名组成结构为:应用名_类名

选拔Q
对象开始展览复杂的查询:Q 对象能够利用& 和| 操作符组合起来,能够运用~ 操作符取反,那允许组合符合规律的查询和取反(NOT)
查询。

Synchronize unmigrated apps: staticfiles, messages

图片 13

Poll.objects.get(
    Q(question__startswith='Who'),
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)

Apply all migrations: admin, contenttypes, auth, sessions

留意:固然大家未有在models给表安装主键,不过Django会自动抬高二个id作为主键

Synchronizing apps without migrations:

操作数据库:

 5.删除对象

Creating tables…

在urls.py中加多两个炫丽:

  delete()方法将立时删除对象且尚未重回值。 

Running deferred SQL…

图片 14

Entry.objects.filter(pub_date__year=2005).delete()

Installing custom SQL…

 

   注意,delete() 是唯一未有在管理器 上暴表露来的查询集方法。那是3个平安机制来幸免你想不到地呼吁Entry.objects.delete(),而除去全体 的条条框框。如果您确实想删除全部的对象,你必须精通地伸手二个全然的查询集:

Running migrations:

 向数据库中增多二个值,修改views.py

Entry.objects.all().delete()

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图