ORM

优势:开发效率高
劣势:损失一部分性能
ORM语法:
     1.操作数据表   增删改
     2.操作数据行   增删改查

Django使用ORM连接数据库
  1. 先自己创建一个数据库
  2. 告诉Django连哪个库
  3. 创建表
  app/models.py写一个类
  注意:要继承mdoels.Model

  4. 使用pymysql这一类模块去真正连接MySQL
  Python2:mysqlDB
  python3:pymysql

  在项目文件夹下的__init__.py文件中写下:
  import pymysql
  pymysql.install_as_MySQLdb()
  5. 两个命令
  python manage.py makemigrations # 用小本本记录models.py中的改动
  python manage.py migrate # 把改动翻译成SQL语句,然后执行

对应关系:

类 --> 表

属性 --> 字段

对象 --> 数据行

操作数据行的语法:
  1. 增加
  Student.objects.create(name="lucifer") -> 创建了一个Student对象

  insert into student(name) values("lucifer");

  2. 删除
  obj.delete()

  3. 改
  obj.name = "新的值"
  obj.save() 提交到数据库

  4. 查
  1. 获取单个数据(对象)
  Student.objects.get(id=1)
  2. 获取所有
  Student.objects.all()

使用ORM连接MySql的步骤:

  1. 手动创建数据库
  2. 在settings.py里面配置一下数据库连接信息
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'book',
            'USER':'root',
            'PASSWORD':'123456',
            'HOST':'127.0.0.1',
            'PORT':3307
        }
    }
  3. 在和settings.py的同级目录下的__init__.py文件中,告诉Django用pymysql代替MySQLdb来连接数据库
    import pymysql
    pymysql.install_as_MySQLdb()
  4. 在app/models.py中,定义类,类一定要继承models.Model
    class books(models.Model):
        id=models.AutoField(primary_key=True)
        title=models.CharField(max_length=64,null=False,unique=True)
        publisher=models.ForeignKey(to='publisher')
  5. 执行两条命令(执行位置:项目根目录)
    python manage.py makemigrations
    #将model.py的改动记录在app/migrations/文件中
    python migrate
    #将改动翻译成sql,去数据库中执行

自定义char类型

class FixedCharField(models.Field):
    """
    自定义的char类型的字段类
    """
    def __init__(self, max_length, *args, **kwargs):
        super().__init__(max_length=max_length, *args, **kwargs)
        self.length = max_length

    def db_type(self, connection):
        """
        限定生成数据库表的字段类型为char,长度为length指定的值
        """
        return 'char(%s)' % self.length


class Class(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=25)
    # 使用上面自定义的char类型的字段
    cname = FixedCharField(max_length=25)

 

posted @ 2019-01-25 01:09  Luciferl  阅读(125)  评论(0编辑  收藏  举报