python增删改查的框架_Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境...

单表增删改查,在Python脚本中调用Django环境

[TOC]

一、数据库连接配置

如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可

如果连接mysql,需要在配置文件中的setting中进行配置:

将DATABASES={} 更新为

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'HOST': '127.0.0.1',

'PORT': 3306,

'USER': 'root',

'PASSWORD': '123123',

'NAME': 'test_database',

}

}

同时还要在__init__.py文件中进行初始化设置:

# 因为django默认链接mysql数据库,用的是MySQLdb模块,python3.0以后,不支持MySQLdb,需要用pymysql替换MySQLdb

import pymysql

pymysql.install_as_MySQLdb()

配置完以后,要进行数据迁移(在pycharm的终端Terminal中运行指令),否则数据更新不能同步到mysql数据库中

python manage.py makemigrations ----记录数据库的变化,在migrations文件中可以看到记录

python manage.py migrate ----将变化同步到数据库中

或者

菜单 tools--->Run manage.py Task,即可进入manage.py,直接输入以下指令即可

makemigrations ----记录数据库的变化,在migrations文件中可以看到记录

migrate ----将变化同步到数据库中

显示没有提交到数据库的数据

python3 manage.py showmigrations ---->查看那个没有提交到数据库

二、orm创建表和字段

1、orm的使用限制

只能创建数据表和字段,不能创建数据库(必须手动创建数据库)

​ 创建一个类就表示创建了一个数据表,类中的属性表示数据表中的字段

创建表和字段在modules.py中

类 ---> 数据表

属性 ---> 字段

2、orm创建表和字段

在app的 models.py 中创建表

# 类必须继承models.Model类,否则只表示一个普通的类

# AutoField 自动增长的int类型

# primary_key=True 该字段是主键

# CharField(max_length=32) 表示 varchar(32)

class User(models.Model):

id = models.AutoField(primary_key=True)

name = models.CharField(max_length=32)

password = models.CharField(max_length=32)

address = models.CharField(max_length=32)

三、单表增删改查

1、增加数据

(1)方式一

# 直接创建数据,返回值是一个对象

book = models.Book.objects.create(name='西游记',price=50.5)

print(book.name)

(2)方式二

# 先实例化产生对象,然后调用save方法,保存

book = models.Book(name='西游记',price=70)

book.save()

print(book.name)

2、删除数据

(1)方式一

返回值是影响的行数

res = models.Book.objects.filter(name='西游记').delete()

(2)方式二

book = models.Book.objects.filter(name='西游记').first()

book.delete()

3、修改数据

(1)方式一

models.Book.objects.filter(name='西游记').update(name='红楼梦')

(2)方式二

对象没有update方法,可以利用对象获取它的属性,来修改数据,改完后要保存

book = models.Book.objects.filter(name='西游记').first()

book.name = '红楼梦'

book.save()

4、查询数据

# 调用queryset对象的query可以查看对应的sql语句

res = models.Book.objects.all()

print(res.query)

(1)查询数据API

# 1. all(): 查询所有结果

res = models.Book.objects.all()

# 2. filter(**kwargs): 它包含了与所给筛选条件相匹配的对象,用逗号分隔,他们之间是and的关系

res = models.Book.objects.filter(name='西游记',price='14')

# 3. get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

res = models.Book.objects.filter(id=1)

# 4. exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象,用逗号分隔,他们之间是and的关系

res = models.Book.objects.exclude(name='西游记',price='23.8')

# 5. order_by(*field): 对查询结果排序('-id'),字段名钱前加 “-” 表示从大到小排序

res = models.Book.objects.all().order_by('price')

res = models.Book.objects.all().order_by('-price')

# 6. reverse(): 对查询结果反向排序,一定要先排序才能反向排序

res = models.Book.objects.all().order_by('-price').reverse()

# 7. count(): 返回数据库中匹配查询(QuerySet)的对象数量。

res = models.Book.objects.all().filter(name='西游记').count()

# 8. first(): 返回第一条记录

res = models.Book.objects.all().first()

# 9. last(): 返回最后一条记录

res = models.Book.objects.all().last()

# 10. exists(): 如果QuerySet包含数据,就返回True,否则返回False

res = models.Book.objects.filter(name='三国演义').exists()

# 11. values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列,model的实例化对象,而是一个可迭代的字典序列

res = models.Book.objects.all().values('name','price')

# 返回值为QuerySet对象

# 12. values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

res = models.Book.objects.all().values_lists('name','price')

# 返回值为QuerySet对象

# 13. distinct(): 从返回结果中剔除重复纪录,只要带了id,去重就没有意义了

res = models.Book.objects.all().values('name').distinct()

(2)基于上下划线的模糊查询

# 1. __in 字段的值在其中

Book.objects.filter(price__in=[100,200,300])

# 2. __gt 字段的值大于指定值

Book.objects.filter(price__gt=100)

# 3. __lt 字段的值小于指定值

Book.objects.filter(price__lt=100)

# 4. __gte 字段的值大于等于指定值

Book.objects.filter(price__gte=100)

# 5. __lte 字段的值小于等于指定值

Book.objects.filter(price__lte=100)

# 6. __range 字段的值在指定区间内,包含头和尾

Book.objects.filter(price__range=[100,200])

# 7. __contains 字段的值包含指定值,区分大小写

Book.objects.filter(title__contains="python")

# 8. __icontains 字段的值包含指定值,不区分大小写

Book.objects.filter(title__icontains="python")

# 9. __startswith 字段的值以指定值开头

Book.objects.filter(title__startswith="py")

# 10. __endswith 字段的值以指定值开头

Book.objects.filter(title__startswith="on")

# 11. __year 日期格式的年为指定值

Book.objects.filter(pub_date__year=2012)

四、在Python脚本中调用Django环境

import os

if __name__ == '__main__':

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings")

import django

# 启动Django环境

django.setup()

from app01 import models

books = models.Book.objects.all()

print(books)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值