一,数据库连接
创建类
a. 在models.py中先写类
from django.db import models
# 表名是app01_userinfo
class UserInfo(models.Model):
# id列,自增,主键
# 用户名列,字符串类型,指定长度
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
b. 注册APP,settings中加入app名称
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
c,选定数据库 用sqlite3还是mysql
DATABASES
=
{
'default'
: {
'ENGINE'
:
'django.db.backends.mysql'
,
'NAME'
:
'dbname'
,
'USER'
:
'root'
,
'PASSWORD'
:
'xxx'
,
'HOST'
: '',
'PORT'
: '',
}
}
d. 执行命令,
python manage.py makemigrations
python manage.py migrate
********** 注意 ***********
Django默认使用MySQLdb模块链接MySQL,也可安装mysqlclient,https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
import pymysql
pymysql.install_as_MySQLdb()
二,数据库增删查改
models: from django.db import models # Create your models here. class userinfo(models.Model): username = models.CharField(max_length=32) password = models.CharField(max_length=64) views: from cmbd import models def orm(request): #创建 插入行 #第一种方法 # models.userinfo.objects.create(username="root",password=123) #第二种方法 # dic = {"username":"eric","password":123} # models.userinfo.objects.create(**dic) #第三种方法 # obj = models.userinfo(username="alex",password=666) # obj.save() #查询 #result = models.userinfo.objects.all() #返回结果是django内置类,相当于结果列表,查询所有 # result = models.userinfo.objects.filter(username="root",password='123') #按条件与查询,后面还可跟.first() .last() .count()第一个最后一个,共几个 # for row in result: # print(row.id,row.username,row.password) #更新 # models.userinfo.objects.update(password=669) #更新所有列的密码 # models.userinfo.objects.filter(id=1).update(password=69) #按条件更新 #删除 # models.userinfo.objects.filter(id=2).delete() #删除id为2的行 return HttpResponse('ok')
三,修改表结构
modules中 from django.db import models class userinfo(models.Model): username = models.CharField(max_length=32) password = models.CharField(max_length=60) email = models.EmailField(max_length=60) favior = models.CharField(max_length=12,null=True) 直接在上面修改max_length=12,加一行即一个字段,删除一行即删除这个字段, 然后 python manage makemigrations ;python manage migrate
四,字段,参数,元信息等,详见 http://www.cnblogs.com/wupeiqi/articles/5246483.html
字段: django中的 EmailFiled,DateTimeField等其实是django的限制,在mysql中还是字符串类型 字符串类型 数字 时间 二进制 自增(primary_key=True) 字段的参数: null -> db是否可以为空 default -> 默认值 primary_key -> 主键 db_column -> 列名 db_index -> 索引 unique -> 唯一索引 unique_for_date -> unique_for_month unique_for_year auto_now_add -> 创建时,自动生成时间,保持不变 auto_now -> 更新时间,更新时自动更新为当前时间 # obj = UserGroup.objects.filter(id=1).update(caption='CEO') 这种操作不支持,不会更新,更新时间,以下操作才支持 # obj = UserGroup.objects.filter(id=1).first() # obj.caption = "CEO" # obj.save() choices -> django admin中显示下拉框,避免连表查询 blank -> django admin是否可以为空 verbose_name -> django admin显示字段中文 editable -> django admin是否可以被编辑 error_messages -> 错误信息欠 help_text -> django admin提示 validators -> django form ,自定义错误信息(欠) 创建 Django 用户:python manage.py createsuperuser
choices 举例,在数据库中user_type_id存放的是数据 ,但是django后台是显示用户类型汉字 class userinfo(models.Model): username = models.CharField(max_length=32) password = models.CharField(max_length=60) email = models.EmailField(max_length=60) user_type_choice = ( (1,'超级用户'), (2,'管理员'), (3,'普通用户'), ) user_type_id = models.IntegerField(choices=user_type_choice,default=3)