一、数据库连接配置

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

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

    将DATABASES={} 更新为

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'pie123',
'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)方式二

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='') # 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对象<{name='红楼梦',price=18},{name='西游记',price=58}> # 12. values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
res = models.Book.objects.all().values_lists('name','price')
# 返回值为QuerySet对象<(name='红楼梦',price=18),(name='西游记',price=58)> # 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)

Django框架(八)--单表增删改查,在Python脚本中调用Django环境的更多相关文章

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

    目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...

  2. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境

    在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTING ...

  3. django系列5.4--ORM中执行原生SQL语句, Python脚本中调用django环境

    ORM执行原生sql语句 在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询. Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回 ...

  4. Python--day69--pythonDjango终端打印SQL语句、在Python脚本中调用Django环境

    Django终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_lo ...

  5. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  6. Django ORM基本的单表增删改查

    创建表 步骤: 1.app下models.py里创建类(继承models.Model) from django.db import models class UserInfo(models.Model ...

  7. mysql数据库单表增删改查命令

    数据库DB-database-mysql 课程安排 第一天: 1.数据库定义以及设计 2.mysql服务端的安装 3.mysql-dos操作 库的操作 表的操作 4.mysql客户端navicate工 ...

  8. ORM之单表增删改查

    ORM之单表增删改查 在函数前,先导入要操作的数据库表模块,model from model所在的路径文件夹 import model   在views文件中,加的路径: #就一个app01功能的文件 ...

  9. MySQL初步理解,简易单表增删改查

    什么是数据库? 存储数据的仓库,本质是一个文件系统,封装了算法和文件之前数据的存储模式 阶段1:集合 数组 变量 缺点:数据存储在内存中,不能实现数据的持久化存储 阶段2:IO流 结合文件 .txt ...

随机推荐

  1. zzXDL

        Pull requestsIssues Marketplace Explore             Learn Git and GitHub without any code! Using ...

  2. 理解Javascript执行过程

    Javascript是一种解释型的动态语言. 在程序中,有编译型语言和解释型语言.那么什么是编译型语言,什么是解释型语言呢? 编译型语言: 它首先将源代码编译成机器语言,再由机器运行机器码(二进制). ...

  3. 代码规范 & 数学之美读后感

    代码规范链接:https://zh-google-styleguide.readthedocs.io/en/latest/contents/ 数学之美读后感 一开始看名字我以为是一本讲数学是怎么发展的 ...

  4. HTTP几种认证方式介绍

    HTTP提供了一套标准的身份验证框架:服务器可以用来针对客户端的请求发送质询(challenge),客户端根据质询提供身份验证凭证.质询与应答的工作流程如下:服务器端向客户端返回401(Unautho ...

  5. [RN] 使用 Genymotion 导致 ” Genymotion 已连接,但无法访问互联网 “ 的错误

    使用 Genymotion 导致 Genymotion 已连接,但无法访问互联网 的错误 先把要点 放前面: 网络二 一定要设置 桥接模式 网上很多文章都是设置为 NAT,笔者均失败! 笔者使用的An ...

  6. 文本特征提取---词袋模型,TF-IDF模型,N-gram模型(Text Feature Extraction Bag of Words TF-IDF N-gram )

    假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...

  7. 【LG1600】[NOIP2016]天天爱跑步

    [LG1600][NOIP2016]天天爱跑步 题面 洛谷 题解 考虑一条路径\(S\rightarrow T\)是如何给一个观测点\(x\)造成贡献的, 一种是从\(x\)的子树内出来,另外一种是从 ...

  8. C++中整型变量的存储大小和范围

    一.代码查看 #include <iostream> #include <climits> using namespace std; int main(void) { cout ...

  9. 《30天自制操作系统》笔记4 --- (Day2 下节)了解如何用汇编写操作系统中的HelloWorld

    关于上一节,我测试了发现3e.4c.4e都OK ,4b 4d 4f都进不去系统还把qemu卡死了. 50不会输出HelloWorld,可能需要hex偶数且在0x3e~4f区间吧.上节复制并运行命令如下 ...

  10. CSP2019蒸馏记

    Day -\(\infty\) ~ Day -2 认真准备联赛. Day -1 复习模板,全真模拟比赛平衡树 下午进行了湖南大学 2 小时游. Day 0 上午睡过头了 下午日常训练,并没有什么开放日 ...