Django基础——ORM字段和字段参数

ORM概念:

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象(

1. 不同的程序员写的SQL水平参差不齐
2. 执行效率也参差不齐

)的技术。

ORM 能够把 python语句 自动的翻译 为SQL语句

ORM优点: 

  1. 简单,不用自己写SQL语句
  2. 开发效率高

  缺点:

  执行效率有差距 

ORM的对应关系:

  类 ---> 数据表
  对象 ---> 数据行
  属性 ---> 字段

扫描二维码关注公众号,回复: 6086635 查看本文章

ORM能做的事儿:
  1. 操作数据表 --> 创建表/删除表/修改表
      操作models.py里面的类

  2. 操作数据行 --> 数据的增删改查

  不能创建数据库,自己动手创建数据库

使用Django的ORM详细步骤:
1. 自己动手创建数据库
  create database 数据库名;
2. 在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)
  # 数据库相关的配置
  DATABASES = {
  'default': {
  'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
  'HOST': '127.0.0.1', # 连接数据库的地址
  'PORT': 3306, # 端口
  'NAME': "day61", # 数据库名称
  'USER': 'root', # 用户
  'PASSWORD': '123456' # 密码
  }
  }

3. 告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库
  在项目/__init__.py文件中,写下面两句:
  import pymysql
  # 告诉Django用pymysql来代替默认的MySQLdb
  pymysql.install_as_MySQLdb()

4. 在app/models.py里面定义类
# 出版社
class Publisher(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主键
# 创建一个varchar(64)的唯一的不为空的字段
name = models.CharField(max_length=64, null=False, unique=True)

5. 执行两个命令
1. python3 manage.py makemigrations --> 把models.py里面的更改记录到小本本上
2. python3 manage.py migrate --> 把更改翻译成SQL语句,去数据库执行

表和表之间的关系
1. 一对多(出版社和书)
publisher = models.ForeignKey(to="Publisher")
数据库中实际 生成的是一个 publisher_id 字段

2. 多对多(作者和书)
books = models.ManyToManyField(to="Book")

在数据库中:
是通过第三张表建立的关系(默认第三张表名 为字段_另一个多对多的字段)

# 书
class Book(models.Model):
	id = models.AutoField(primary_key=True)
	bookname = models.CharField(null=False,max_length=15,unique=True)
	price = models.DecimalField(max_digits=5,decimal_places=2,default=99.99)
	kucun = models.IntegerField(default=10000)
	sell_num = models.IntegerField(default=0)
	# 书和出版社关联的外键(单表对单表的)
	# on_delete=models.CASCADE ; 级联删除,即删除主表数据会自动删除从表数据;使关联的数据对应;
	# related_name 来代替 表名_set;
	publisher = models.ForeignKey(to="Publisher",default=1,on_delete=models.CASCADE,related_name='books')
	#在数据库里面生成的字段为 publisher_id 是出版社的id
	#Book.object.publisher 为该书对应的出版社的对象;
	def __str__(self):
		return "Publisher_object:{}".format(self.bookname)

#出版社
class Publisher(models.Model):
	id = models.AutoField(primary_key=True)
	name = models.CharField(null=False,max_length=15,unique=True)

	def __str__(self):
		return "Publisher_object:{}".format(self.name)

	# class Meta:
	# 	ordering ='id'
		
# 书和出版社是,1对1的(ForeignKey(to=)),是需要添加外键的

# 而书和作者是多对多的,一本书可以有多个作者,还有一个作者也可能有多本书,即多对多的时候用(ManyToManyField(to=))
#然后ROM会自动的帮你生成另外的一张表来表示多对多的关系,这个列子生产的另外一个表为author_book;
# 作者
class Author(models.Model):
	id = models.AutoField(primary_key=True)
	author_name = models.CharField(null=False, max_length=15)
	#多对多的
	book = models.ManyToManyField(to="Book")

	def __str__(self):
		return "Publisher_object:{}".format(self.author_name)

 详细参考(点我) 

猜你喜欢

转载自www.cnblogs.com/zenghui-python/p/10800176.html