Django学习小记-ORM操做概要1

其实许多web框架都是用的pymysql来链接控制数据库,但Django还提供了ORM的数据库操做办法(本质也是pymysql);两种方式皆可,但咱们有必要去学一下ORMjavascript

  • 再也不关注用的是mysqloracle...等.
  • 经过简单的配置就能够轻松更换数据库, 而不须要修改代码.

ORM操做:html

  http请求:java

    url -> 视图(模板+数据)python

  ORM操做表:mysql

    建立表、修改表、删除表web

  操做数据行:sql

    增删改查数据库

  ORM利用pymysql等第三方工具链接数据库django

  默认sqlitesession

  默认:mysql -> MYSQLDB(修改django默认链接mysql的方式

 

 

默认setting文件这样设置的:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }

咱们须要修改为以下配置:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } }

# 以下设置放置的与project同名的配置的 __init__.py文件中

# 因为Django内部链接MySQL时使用的是MySQLdb模块,而python3中还无此模块,因此须要使用pymysql来代替

import pymysql pymysql.install_as_MySQLdb()

要是出现这个bug这样修复-->  django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3

总结准备步骤就是:

  1. 建立数据库
  2. 修改setting文件
  3. 修改__init__.py文件引入pymysql

 接下来建立一个类,让类给我们生成表:

在app01文件夹里的models.py修改:

from django.db import models #建立表、列(id\nid...
class UserInfo(models.Model): nid = models.BigAutoField(primary_key=True) #这行不写Django默认会自动建立id而且是自增主键,因此之后能够不用写这行了! username = models.CharField(max_length=32) password = models.CharField(max_length=64)

那如何让class给咱建立表呢?..再去setting里注册上app01:

# Application definition
 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01' ]
View Code

最后就要放大招:生成表!这两命令记在骨髓里!!!

#要是你app里没有migrations文件先要生成下! #python manage.py makemigrations --empty app01
 python manage.py makemigrations python manage.py migrate

看它一一会儿除了咱们本身的表还有不少表,这些表其实与Django自带的那个后台有关:

 此时,migrations文件夹下就生成相应配置文件,轻易不要删除哦~

假如之后你想在class里修改表名,请直接修改,再执行一次“骨髓命令”就行!有数据也不要紧!

假如之后你想在加一列age = models.IntegeField(),直接加就行,可是....

若原表中有数据了,只要指定age = models.IntegeField(null=True)或者age = models.IntegeField(default=xxx)

若建立一对多等关系就例如 ug = models.ForeignKey("UserGroup",null=True)    #生成是外键 ug_id

数据库相关操做:增删改查

#test可删
def test(requst): from app01 import models #新增
    models.UserInfo.objects.create(username='shannon',password='111111') #查找
    #userinfo QuerySet类型(列表)[obj,obj,obj]
    userinfo = models.UserInfo.objects.all() for row in userinfo: print(row.nid,row.username) #加条件的查找filter()
    # ,是and ; id__gt=1 是id大于1;id__lt=1 是id小于1
    userinfo = models.UserInfo.objects.filter(nid=2,username='shannon') #删除,删前得先找到~
    models.UserInfo.objects.filter(nid=1).delete() #更新
    models.UserInfo.objects.filter(nid=4).update(password='123') return HttpResponse('成功')

 ORM连表操做

《models.py》
from
django db import models class UserType(models Model): #用户类型 title= models.CharField(max length=32) class UserInfo(models. Model): #用户表 name= models.CharField(max length=16) age= models.IntegerFieldo ut= models.ForeignKey(UserType)
------------------------------------------------
#获取
#QuerySet[obj,obj,obj] 是列表类型
result =models.UserInfo objects.all()
for obj in resylt:
  print(obj.name,obj.age,obj.ut_id,obj.ut.title)
  #其实Django帮你作了连表


QuerySet[obj,obj,obj] 是列表类型

#UserInfo, ut是FK字段 - 正向操做 (一个用户只有一个用户类型)

#UserInfo ,表名小写_set.all() - 反向操做 (一个用户类型下能够有不少用户)

 

【Django】 让models 里面的内容正序或倒序显示?

问题描述
在进行django开发过程当中,对app的内容进行更新,发现更新的内容显示在文末,没有显示在开头,指望全部的内容根据更新时间倒序显示

解决方法
问题很好解决,咱们只须要在models里面添加以下代码:

class Gally(models.Model): title = models.CharField(max_length=50, verbose_name='标题') create_time = models.DateTimeField(default=timezone.now, verbose_name='建立时间') class Meta: ordering = ('-create_time',)

 便可实现经过create_time 倒序排列,固然你也能够

ordering = ('-id',) 也就是最新的显示在最前面。

若是要正序,也很简单,去掉create_time 的 ‘-’ 符号就能够了
————————————————
固然,还有一种简单的方法:直接在查询后面加order_by

user_list = models.UserInfo.objects.all().order_by('id') #倒序:
user_list = models.UserInfo.objects.all().order_by('-id') #多个排序条件,先左后右原则
user_list = models.UserInfo.objects.all().order_by('id','name')

 

 

ethtool

相关文章
相关标签/搜索