首页 > 其他 > 详细

Django学习小记-ORM操作概要

时间:2020-01-09 21:04:59      阅读:75      评论:0      收藏:0      [点我收藏+]

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

  • 不再关注用的是mysqloracle...等.
  • 通过简单的配置就可以轻松更换数据库, 而不需要修改代码.

ORM操作:

  http请求:

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

  ORM操作表:

    创建表、修改表、删除表

  操作数据行:

    增删改查

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

  默认sqlite

  默认: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自带的那个后台有关:

技术分享图片

 

假如以后你想在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(成功)

 

实施

Django学习小记-ORM操作概要

原文:https://www.cnblogs.com/ethtool/p/12171368.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!