Django 对数据库的操作比较简单, 它已经对数据库进行了封闭, 我们无需去关注数据库的细节(即无需像三层架构那样对数据库进行封闭, Django 已经为我们封装好了).
首先, 打开工作目录下的 settings.py 文件, 修改 DATABASES:
DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME':'newdjango', 'USER':'root', 'PASSWORD':'admin', 'HOST':'', 'PORT':'3306', } }
上面的 NAME 指的是数据库名, 如下图:
接下来, 检查下 settings.py 里的 INSTALLED_APPS 是否包含 app:
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'web', )
这里是最后一个 ‘web’.
Django 不能自动为我们创建数据库, 但是可以为自动创建表, 现在在 models.py 中设置表和字段.
#-*- coding:utf-8 -*- from django.db import models # Create your models here. class UserInfo(models.Model): # 表名 username = models.CharField(max_length=50) # 指定字段 password = models.CharField(max_length=50) # 指定字段
然后, 依次执行命令:
python manage.py makemigrations – 基于当前的 Model 创建新的策略文件
python manage.py migrate – 让我们在修改 Model 后可以在不影响现有数据的前提下重建表结构
python manage.py syncdb – migrate 已具有 syncdb 的功能, 所以无需再执行
Python 1.7 以下的版本执行 syncdb.
如果报错: No module named MySQLdb 那么就是没有安装 MySQL Python 模块, 安装下即可, 用 pip 似乎有点问题, 可以下载http://yunpan.cn/cm69fkFPDirFu 访问密码 2f0c 安装即可.
常用字段
models.AutoField | `自增列 ```如果没有的话, 默认会生成一个名称为 ``id` `的列, 如果要显示的自定义一个自增列, 必须将给列设置为主键 primary_key``=``True.`` |
models.CharField | 字符串字段 必须指定 max_length 参数. |
models.BooleanField | `布尔类型`` `不能为空, Blank``=``True.`` |
models.ComaSeparatedIntegerField | 用逗号分割的数字 继承 CharField, 所以必须指定 max_lenght 参数. |
models.DateField | 日期类型 date `对于参数, auto_now ``=` `True` `则每次更新都会更新这个时间; auto_now_add 则只是第一次创建添加, 之后的更新不再改变.` |
models.DateTimeField | 日期类型 datetime 同DateField的参数. |
models.Decimal | 十进制小数类型 必须指定整数位 max_digits 和小数位 decimal_places. |
models.EmailField | 字符串类型 对字符串进行正则表达式. |
models.FloatField | `浮点类型 ``double` |
models.IntegerField | 整形 |
models.BigIntegerField | 长整形 |
models.SmallIntegerField | 数字 `数据库中的字段有: tinyint、smallint、``int``、bigint` |
models.PositiveIntegerFiel | 正 Integer |
models.PositiveSmallIntegerField | 正 SmallInteger `integer_field_ranges ``=` `{` ```'IntegerField'``: (``-``2147483648``, ``2147483647``),` ```'BigIntegerField'``: (``-``9223372036854775808``, ``9223372036854775807``),` ```'PositiveSmallIntegerField'``: (``0``, ``32767``),` ```'PositiveIntegerField'``: (``0``, ``2147483647``),` `'SmallIntegerField'``: (``-``32768``, ``32767``),` `}` |
models.IPAddressField | 字符串类型(ip4正则表达式) |
models.GenericIPAddressField | 字符串类型(ip4和ip6是可选的) `参数 protocol 可以是: both、ipv4、ipv6` `验证时, 会根据设置报错` |
models.NullBooleanField | 允许为空的布尔类型 |
models.SlugField | 减号、下划线、字母、数字 |
models.TextField | `字符串`` ``longtext` |
models.TimeField | 时间 HH:MM[:ss[.uuuuuu]] |
models.URLField | 字符串, 地址正则表达式 |
models.BinaryField | `二进制 ``23``、models.ImageField 图片 ``24``、models.FilePathField 文件` |
常用参数
null = True | 数据库中字段是否可以为空 |
blank = True | django 的 Admin 中添加数据时是否可允许空值 |
primary_key = False | 主键,对AutoField设置主键后,就会代替原来的自增 id 列 |
auto_now | 自动创建---无论添加或修改,都是当前操作的时间 |
auto_now_add | 自动创建---永远是创建时的时间 |
choices | GENDER_CHOICE = ( (u'M', u'Male'), (u'F', u'Female'), ) gender = models.CharField(max_length=2,choices = GENDER_CHOICE) |
max_length | |
default | 默认值 |
verbose_name | Admin 中字段的显示名称 |
name|db_column | 数据库中的字段名称 |
unique = True | 不允许重复 |
db_index = True | 数据库索引 |
editable = True | 在 Admin 里是否可编辑 |
error_messages = None | 错误提示 |
auto_created = False | 自动创建 |
help_text | 在 Admin 中提示帮助信息 |
validators = [] | |
upload-to |
外键 – 多对一
用来形成表表对应, 即让一张表里的某些字段和另一张表里的 ID 字段形成联系.
#-*- coding:utf-8 -*- from django.db import models class UserType(models.Model): # 表名 name = models.CharField(max_length=50) # 字段 # Create your models here. class UserInfo(models.Model): # 表名 username = models.CharField(max_length=50) # 字段 password = models.CharField(max_length=50) # 字段 ''' 建立外键 字段名称+ "_id" 做为数据库中的列名称 这里最终数据库中就是 typeId_id ''' typeId = models.ForeignKey("UserType")
外键 – 多对多
要实现多对多, 需要再创建一个”中间表”, 使用 Django, 它会自动帮我们创建.
class User(models.Model): # 表名 account = models.CharField(max_length=50) # 字段 class Group(models.Model): # 表名 groupName = models.CharField(max_length=50) # 字段 user_relation = models.ManyToManyField("User") # 建立关系, Django 会自动建立中间表
☠