Django的ORM映射机制 20课知识点整理

详细阅读:(http://www.cnblogs.com/wupeiqi/articles/5246483.html)

app:
        migrations     数据修改表结构
        admin          Django为我们提供的后台管理
        apps           配置当前app
        models         ORM,写指定的类  通过命令可以创建数据库结构
        tests          单元测试
        views          业务代码


四.ORM操作
select * from tb where id > 1
# 对应关系
models.tb.objects.filters(id__gt=1)
models.tb.objects.filters(id=1)
models.tb.objects.filters(id__lt=1)


a.修改settings.py
'''
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
]
'''


b.创建类
# app01_userinfo
class UserInfo(models.Model):
    # Django自动创建id列,自增,主键
    # 用户名列,字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    
    
c.执行命令
(python manage.py makemigrations)[创建表]
(python manage.py migrate)[生成数据库]



d.*************注意*******************
python3没有MySQLdb模块
要用pymysql模块
如果要连接mysql的话
要在s14day19_2\__init__.py目录修改__init__.py
添加以下代码:
'''
import pymysql

pymysql.install_as_MySQLdb()
'''

django默认使用MySQLdb模块连接MySQL
主动修改为pymysql:在project同名文件夹下的__init__文件中添加如下代码即可:
'''
import pymysql
pymysql.install_as_MySQLdb()
'''




1. 根据类自动生成创建数据库系统表
    # app下的models.py
    
    python manage.py makemigrations
    python manage.py migrate
    
    字段:
        字符串类型
        
        数字
        
        时间
        
        二进制
        
        自增(primary_key=True)
    字段的参数:
        null(db是否可以为空)                数据库中字段是否可以为空
    db_column(列名)           数据库中字段的列名
    db_tablespace
    default(默认值)             数据库中字段的默认值
    primary_key(主键)         数据库中字段是否为主键
    db_index(索引)            数据库中字段是否可以建立索引
    unique(唯一索引)              数据库中字段是否可以建立唯一索引
    unique_for_date     数据库中字段【日期】部分是否可以建立唯一索引
    unique_for_month    数据库中字段【月】部分是否可以建立唯一索引
    unique_for_year     数据库中字段【年】部分是否可以建立唯一索引
    auto_now(创建时,自动生成时间)
    auto_now_add(更新时,自动更新为当前时间)
    choices(django admin中显示下拉框,避免连表查询)    Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
    blank(django admin是否可以为空)               Admin中是否允许用户输入为空
    verbose_name(django admin显示字段中文)        Admin中显示的字段名称
    editable(django admin是否可以编辑)            Admin中是否可以编辑
    error_messages
    help_text(django admin提示)
    validators(django form,自定义错误信息)
    
    
    
    # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
    # obj = UserGroup.objects.filter(id=1).first()
    # obj.caption = "CEO"
    # obj.save()
    
    
    
    
    
    help_text           Admin中该字段的提示信息
    
                        如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

    error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
                        字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
                        如:{'null': "不能为空.", 'invalid': '格式错误'}

    validators          自定义错误验证(列表类型),从而定制想要的验证规则
                        from django.core.validators import RegexValidator
                        from django.core.validators import EmailValidator,URLValidator,DecimalValidator,\
                        MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
                        如:
                            test = models.CharField(
                                max_length=32,
                                error_messages={
                                    'c1': '优先错信息1',
                                    'c2': '优先错信息2',
                                    'c3': '优先错信息3',
                                },
                                validators=[
                                    RegexValidator(regex='root_\d+', message='错误了', code='c1'),
                                    RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'),
                                    EmailValidator(message='又错误了', code='c3'), ]
                            )

参数
    
    
    

2. 根据类对数据库表中的数据进行各种操作

    一对多:
        a.外键
        b.
            外键字段_id
        c.
            models.tb.object.create(name='root',user_group_id=1)
            
        d.
            userlist = models.tb.object.all()
            for row in userlist:
                row.id
                row.user_group_id
                row.user_group.caption


你可能感兴趣的:(Django的ORM映射机制 20课知识点整理)