数据库操作

dbfirst:数据库优先

codefirst(ORM):代码优先,sqlalchemy和DJango都是用的这种

创建表

a.在app下的models.py中,创建类

from django.db import models

class UserInfo(models.Model):

#django会默认为我们生成一个自增且是主键的id列

uid = models.AutoField(primary_key=True)  #当然也可以自己写,必须要这样写

username = models.CharField(max_length=32)  # 用户名列,字符串类型,指定长度

password = models.CharField(max_length=64)

b.注册app(在settings下的INSTALLED_APPS中将app的名字添加进路径)

INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'app01',

]

c.执行命令

python manage.py makemigrations

python manage.py migrate

Django连接mysql

Django默认使用MySQLdb模块链接MySQL但MySQLdb只支持到python2.7,所以要进行以下操作

settings.py

DATABASES = {

'default': {

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

'NAME':'dbname',

'USER': 'root',

'PASSWORD': 'xxx',

'HOST': '',

'PORT': '',

}

}

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

import pymysql

pymysql.install_as_MySQLdb()

字段

字符串类型

数字类型

时间类型

二进制类型

字段的参数

a.数据库部分

null 数据库中字段是否可以为空

email = models.CharField(max_length=60,null=True)

db_column 数据库中字段的列名

email = models.CharField(max_length=60,db_column='e-mail')

default 数据库中字段的默认值

email = models.CharField(max_length=60,default='alex3714@163.com')

primary_key 数据库中字段是否为主键

uid = models.AutoField(primary_key=True)#AutoField 自增

db_index 数据库中字段是否可以建立索引

unique 数据库中字段是否可以建立唯一索引

unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引

unique_for_month 数据库中字段【月】部分是否可以建立唯一索引

unique_for_year 数据库中字段【年】部分是否可以建立唯一索引

auto_now       创建时自动生成当前时间

uptime = models.DateTimeField(auto_now=True, null=True)

auto_now_add     更新时,自动更新为当前时间

ctime = models.DateTimeField(auto_now_add=True, null=True)

obj = UserGroup.objects.filter(id=1).update(caption='CEO')  #使用这种方式更新时不能记录

obj = UserGroup.objects.filter(id=1).first()

obj.caption = "CEO"

obj.save()

b.admin/modelform部分

verbose_name Admin中显示的字段名称

blank Admin中是否允许用户输入为空

editable Admin中是否可以编辑

help_text Admin中该字段的提示信息

choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作

如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

error_messages 先pass,自定义错误信息(字典类型),从而定制想要显示的错误信息;

字典键:null, blank, invalid, invalid_choice, unique, and unique_for_date

如:{'null': "不能为空.", 'invalid': '格式错误'}

validators pass

#小tips:数据库中的EmailField,URLFiled等是给admin用的

1 from django.db importmodels2

3 #Create your models here.

4

5 classUserInfo(models.Model):6 username = models.CharField(max_length=32, verbose_name='用户名') #用户名列,字符串类型,指定长度

7 password = models.CharField(max_length=60, help_text='pwd')8 email = models.CharField(max_length=60,null=True,blank=True)9 test = models.EmailField(max_length=19, null=True)10 text = models.CharField(max_length=20,null=True,editable=False)

View Code

2、根据类对数据库表中的数据进行各种操作

对数据库的增、删、改、查

views.py

from cmdb import models

def orm(request):

#增,建议用前两种

models.UserInfo.objects.create(username='root',password='123')

dic={'username':'alex','password':'321'}

models.UserInfo.objects.create(**dic)

obj = models.UserInfo(username='x54256',password='666')

obj.save()

#查,filter<==>where查询条件

result = models.UserInfo.objects.all() #拿到所有的

#Query[obj1(uid,username,password),obj2(uid,username,password),obj3(uid,username,password)]

for i in result:

print(i.uid,i.username,i.password)

result = models.UserInfo.objects.filter(username='root')

for item in result:

print(item.uid,item.username,item.password)

#小tips:result.query==>查看当前sql语句

result = models.UserInfo.objects.filter(username='root',password='123').first()  #直接取得就是Query对象

print(result.uid,...)

#删

models.UserInfo.objects.filter(username='root').delete()

#改

models.UserInfo.objects.filter(id=3).update(password=147)

return HttpResponse('abc')

5种查询方法(元组,字典方法)

v1 = models.Host.objects.all()

# QuerySet[obj(id,hostname),obj,...],内部元素都是对象

v2 = models.Host.objects.all().values('hostname','ip','port','b_id','b__caption')

#b连接的外键 在元组和字典格式里跨表查询时要用"__"

# QuerySet[{'hostname':c1,'ip':1.1.1.1,'port':80,'b_id':2,'b__caption':abc},{},...],内部元素都是字典

v3 = models.Host.objects.all().values_list('hostname', 'ip', 'port', 'b__caption')

# QuerySet[(c1,1.1.1.1,80,2,abc),(),...],内部元素都是元组

models.Business.objects.get(id=1)# 获取到的一个对象,如果不存在就报错

获取到一个对象或者None : models.Business.objects.filter(id=1).first()#***建议用这种

return render(request,'host.html',{'v1':v1,'v2':v2,'v3':v3,'b_list':b_list})

1

2

3

4

5

Title

6

7

8

业务线列表(对象)

9

10 {% for i in v1 %}11

{{ i.id }}-{{ i.caption }}-{{ i.code }}

12 {% endfor %}13

14

业务线列表(字典)

15

16 {% for i in v2 %}17

{{ i.id }}-{{ i.caption }}

18 {% endfor %}19

20

业务线列表(元组)

21

22 {% for i in v3 %}23

{{ i.0 }}-{{ i.1 }}

24 {% endfor %}25

26

27

28

29

django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)相关推荐

  1. GZFramwork数据库层《四》单据主从表增删改查

    同GZFramwork数据库层<三>普通主从表增删改查 不同之处在于:实例 修改为: 直接上效果: 项目源码下载地址:https://github.com/GarsonZhang/GZFr ...

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

    单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的settin ...

  3. mysql如何修改学生表_MySQL 详细单表增删改查crud语句

    MySQL 增删改查语句 1.创建练习表 这里练习表没有满足三范式 第一范式(又称 1NF):保证每列的原子性 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性.满足第一范 ...

  4. Django框架(八)--单表增删改查,在Python脚本中调用Django环境

    一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...

  5. mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率

    原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...

  6. 【MySQL 第三天数据库表 增删改查】

    [MySQL 第三天数据库表 增删改查]] [1]mysql数据库表创建命令 [2]mysql查看数据库下的表命令 [3]mysql查看表内容命令 [4]mysql修改数据库表 [4.1]mysql添 ...

  7. python增删改查的框架_python的Web框架,Django的ORM,模型基础,MySQL连接配置及增删改查...

    Django中的ORM简介 ORM概念:对象关系映射(Object Relational Mapping,简称ORM): 用面向对象的方式描述数据库,去操作数据库,甚至可以达到不用编写SQL语句就能够 ...

  8. 【面试必备】除了基本的增删改查外,面试官好问的那些看上去高级但又非常实用的Sql查询语句(以Mysql为例),涵盖视图和存储过程等众多知识点

    在平时的面试中,我们经常遇到面试官考我们的SQL功底,当然并不是考我们的基本的增删改查这些简单的SQL,而是那些我们不经常使用的,通常在你原来的公司你不怎么关注但在新公司却常用的语句.这种情况下,如果 ...

  9. python 列表嵌套字典 添加修改删除_python 列表、字典、元组等增删改查

    1. 元组 a. 定义和下标访问 元组的格式: (值,....) 如 s = (1,2,3) 元组的类型: tuple 元组的下标使用同字符串 注意:如果元组中只有一个元素,那么在定义时,需要加一个逗 ...

  10. Django之数据表增删改查

    Django数据增删改查: 上课代码 from django.shortcuts import render,HttpResponse# Create your views here. from ap ...

最新文章

  1. 申请加入 “WebGIS” 团队
  2. JS: 关于元素大小和距离的有关的属性总结
  3. pycharm使用github
  4. LeetCode Algorithm 103. 二叉树的锯齿形层序遍历
  5. oracle 补丁打不上_oracle 打补丁常见问题
  6. libevent源码深度剖析十二
  7. 新技能 get —— 五笔打字
  8. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第3节 综合案例_文件上传_1_综合案例_文件上传的原理...
  9. Mysql清理数据库中的重复脏数据
  10. fanuc机器人示教器输入中文注释
  11. ZYNQ BRAM_ctrl PS PL通信报错
  12. 一招解决微博视频不能下载的问题
  13. juniper 开放端口_Juniper 防火墙端口映射设置
  14. Linux 查看MAC地址
  15. 手机APP如何远程控制PLC
  16. 在麒麟v10系统上面安装达梦数据库8
  17. linux下configure命令详细介绍
  18. 魔百和E900V22C_905L3A(B)_5621DS-安卓9.0-纯净语音
  19. 把excel转换成html格式的文件,极强PDF转换器将Excel表格转换成HTML网页格式的方法...
  20. 从0到将突破5000亿美金,阿里18年组织是如何进化的?

热门文章

  1. java+log日志服务器_Logserver日志服务器结构
  2. STM32跑分?看看你的能跑多少分!
  3. 测试你C语言水平的十道题,挑战一下?
  4. vscode 设置缩进为4_VS Code 设置缩进为4个空格
  5. php 路径 函数不存在,php目录不存在是怎么判断的
  6. Powerful array CodeForces - 86D (莫队算法)
  7. 牛客练习赛26B 烟花 (概率DP)
  8. C++Primer第五版学习笔记
  9. #Plugin 中国省市选择插件
  10. spingboot集成jpa(一)