Django ORM 之一
内容目录:
一、单表查询
二、多表查询
0、准备工作
一些说明:
- 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时。
- id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可。如果Django发现你已经明确地设置了Field.primary_key,它将不会添加自动ID列。
- 本示例中的CREATE TABLE SQL使用PostgreSQL语法进行格式化,但值得注意的是,Django会根据配置文件中指定的数据库后端类型来生成相应的SQL语句。
- Django支持MySQL5.5及更高版本。
![]()
(1) 让Django使用MySQL数据库
在settings.py中配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day58',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456',
}
}
在应用下或者项目下的__init__.py文件中配置:
import pymysql
pymysql.install_as_MySQLdb()
(2) models.py文件中建表:
# 单表查询表
class User(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
register_time = models.DateField()
def __str__(self):
return '对象的名字:%s' % self.name
# 多表查询表
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8, decimal_places=2)
publish_date = models.DateField(auto_now_add=True)
# 外键关系
publish = models.ForeignKey(to='Publish')
authors = models.ManyToManyField(to='Author') # 虚拟字段, 信号字段
def __str__(self):
return '书籍对象的名字:%s' % self.title
class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=32)
email = models.EmailField() # 对应就是varchar类型
def __str__(self):
return '出版社对象的名字:%s' % self.name
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
authordetail = models.OneToOneField(to='AuthorDetail')
def __str__(self):
return '作者对象的名字:%s' % self.name
class AuthorDetail(models.Model):
phone = models.CharField(max_length=32)
addr = models.CharField(max_length=32)
# 稍微解释一下:一共有 User,Book,Author,Publish,AuthorDetail共五张表。Book与Author是多对多的关系,Book与Publish是一对多的关系,Author与AuthorDetail是一对一的关系。
models.py建立映射表