• dbfirst:数据库优先
  • codefirst(ORM):代码优先,sqlalchemy和DJango都是用的这种

创建表

a.在app下的models.py中,创建类

from django.db import models

class UserInfo(models.Model):
	#django会默认为我们生成一个自增且是主键的id列
	uid = models.AutoField(primary_key=True)  #当然也可以自己写,必须要这样写
	username = models.CharField(max_length=32)  # 用户名列,字符串类型,指定长度
	password = models.CharField(max_length=64)

b.注册app(在settings下的INSTALLED_APPS中将app的名字添加进路径)

INSTALLED_APPS = [
	'django.contrib.admin',
	'django.contrib.auth',
	'django.contrib.contenttypes',
	'django.contrib.sessions',
	'django.contrib.messages',
	'django.contrib.staticfiles',
	'app01',
]

c.执行命令

python manage.py  makemigrations

python manage.py  migrate

Django——model(建表,增删改查,外键,多对多)

Django——model(建表,增删改查,外键,多对多)

Django连接mysql

Django默认使用MySQLdb模块链接MySQL但MySQLdb只支持到python2.7,所以要进行以下操作

settings.py

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'dbname',
    'USER': 'root',
    'PASSWORD': 'xxx',
    'HOST': '',
    'PORT': '',
    }
}


如下设置放置的与project同名的配置的__init__.py文件中
  
import pymysql
pymysql.install_as_MySQLdb() 

Django——model(建表,增删改查,外键,多对多)

 

Django——model(建表,增删改查,外键,多对多)  

 字段

  • 字符串类型
  • 数字类型
  • 时间类型
  • 二进制类型

字段的参数

a.数据库部分

null                数据库中字段是否可以为空
email = models.CharField(max_length=60,null=True)

db_column           数据库中字段的列名
email = models.CharField(max_length=60,db_column='e-mail')

default             数据库中字段的默认值
email = models.CharField(max_length=60,default='alex3714@163.com')

primary_key         数据库中字段是否为主键
uid = models.AutoField(primary_key=True)	#AutoField 自增
db_index            数据库中字段是否可以建立索引
unique              数据库中字段是否可以建立唯一索引
unique_for_date     数据库中字段【日期】部分是否可以建立唯一索引
unique_for_month    数据库中字段【月】部分是否可以建立唯一索引
unique_for_year     数据库中字段【年】部分是否可以建立唯一索引

auto_now       创建时自动生成当前时间
uptime = models.DateTimeField(auto_now=True, null=True)

auto_now_add     更新时,自动更新为当前时间
ctime = models.DateTimeField(auto_now_add=True, null=True)

obj = UserGroup.objects.filter(id=1).update(caption='CEO')  #使用这种方式更新时不能记录

obj = UserGroup.objects.filter(id=1).first()
obj.caption = "CEO"
obj.save()

b.admin/modelform部分

Django——model(建表,增删改查,外键,多对多)

verbose_name        Admin中显示的字段名称
blank               Admin中是否允许用户输入为空
editable            Admin中是否可以编辑
help_text           Admin中该字段的提示信息
choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
                    如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

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

validators          pass

#小tips:数据库中的EmailField,URLFiled等是给admin用的

Django——model(建表,增删改查,外键,多对多)

 1 from django.db import models
 2 
 3 # Create your models here.
 4 
 5 class UserInfo(models.Model):
 6     username = models.CharField(max_length=32, verbose_name='用户名')    # 用户名列,字符串类型,指定长度
 7     password = models.CharField(max_length=60, help_text='pwd')
 8     email = models.CharField(max_length=60,null=True,blank=True)
 9     test = models.EmailField(max_length=19, null=True)
10     text = models.CharField(max_length=20,null=True,editable=False)
View Code

相关文章: