django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)
数据库操作
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(建表,增删改查,外键,多对多)相关推荐
- GZFramwork数据库层《四》单据主从表增删改查
同GZFramwork数据库层<三>普通主从表增删改查 不同之处在于:实例 修改为: 直接上效果: 项目源码下载地址:https://github.com/GarsonZhang/GZFr ...
- django调用python脚本返回_Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境...
单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的settin ...
- mysql如何修改学生表_MySQL 详细单表增删改查crud语句
MySQL 增删改查语句 1.创建练习表 这里练习表没有满足三范式 第一范式(又称 1NF):保证每列的原子性 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性.满足第一范 ...
- Django框架(八)--单表增删改查,在Python脚本中调用Django环境
一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...
- mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率
原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...
- 【MySQL 第三天数据库表 增删改查】
[MySQL 第三天数据库表 增删改查]] [1]mysql数据库表创建命令 [2]mysql查看数据库下的表命令 [3]mysql查看表内容命令 [4]mysql修改数据库表 [4.1]mysql添 ...
- python增删改查的框架_python的Web框架,Django的ORM,模型基础,MySQL连接配置及增删改查...
Django中的ORM简介 ORM概念:对象关系映射(Object Relational Mapping,简称ORM): 用面向对象的方式描述数据库,去操作数据库,甚至可以达到不用编写SQL语句就能够 ...
- 【面试必备】除了基本的增删改查外,面试官好问的那些看上去高级但又非常实用的Sql查询语句(以Mysql为例),涵盖视图和存储过程等众多知识点
在平时的面试中,我们经常遇到面试官考我们的SQL功底,当然并不是考我们的基本的增删改查这些简单的SQL,而是那些我们不经常使用的,通常在你原来的公司你不怎么关注但在新公司却常用的语句.这种情况下,如果 ...
- python 列表嵌套字典 添加修改删除_python 列表、字典、元组等增删改查
1. 元组 a. 定义和下标访问 元组的格式: (值,....) 如 s = (1,2,3) 元组的类型: tuple 元组的下标使用同字符串 注意:如果元组中只有一个元素,那么在定义时,需要加一个逗 ...
- Django之数据表增删改查
Django数据增删改查: 上课代码 from django.shortcuts import render,HttpResponse# Create your views here. from ap ...
最新文章
- 申请加入 “WebGIS” 团队
- JS: 关于元素大小和距离的有关的属性总结
- pycharm使用github
- LeetCode Algorithm 103. 二叉树的锯齿形层序遍历
- oracle 补丁打不上_oracle 打补丁常见问题
- libevent源码深度剖析十二
- 新技能 get —— 五笔打字
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第3节 综合案例_文件上传_1_综合案例_文件上传的原理...
- Mysql清理数据库中的重复脏数据
- fanuc机器人示教器输入中文注释
- ZYNQ BRAM_ctrl PS PL通信报错
- 一招解决微博视频不能下载的问题
- juniper 开放端口_Juniper 防火墙端口映射设置
- Linux 查看MAC地址
- 手机APP如何远程控制PLC
- 在麒麟v10系统上面安装达梦数据库8
- linux下configure命令详细介绍
- 魔百和E900V22C_905L3A(B)_5621DS-安卓9.0-纯净语音
- 把excel转换成html格式的文件,极强PDF转换器将Excel表格转换成HTML网页格式的方法...
- 从0到将突破5000亿美金,阿里18年组织是如何进化的?