返回ORM目录 Django ORM

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建立映射表

相关文章: