ORM操作
ORM:操作表:
- 创建表
- 修改表( 在SQLAchemy中不能进行修改表操作)
- 删除表
ORM:操作数据行:
- 增删改查
配置
1. 创建数据库
2. 配置 修改 settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'dbname',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '',
}
# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替
# 如下设置放置的与project同名的配置的 __init__.py文件中
3.
import pymysql
pymysql.install_as_MySQLdb()
4.创建类
from django.db import models
class UserInfo(models.Model):
nid = models.BigAutoField(primary_key=True) # 如果不写 Django默认添加一列自增列
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
5.在setting.py 里注册app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
6. 创建数据库表
python manage.py makemigrations
python manage.py migrate
python manage.py makemigrations:
读取类的信息,在migations文件夹里生成配置文件。
python manage.py migrate:
拿着makemigrations生成的配置文件去生成数据库表的语句。
# 增加新的一列
class UserInfo(models.Model):
nid = models.BigAutoField(primary_key=True)
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField() # 增加的一列
➜ task003 git:(master) ✗ python3 manage.py makemigrations
You are trying to add a non-nullable field 'age' to userinfo without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
***新增加的一列要么 指定为空 要么 指定一个默认值
age = models.IntegerField(default=1)
# age = models.IntegerField(null=True)
# 创建外键
from django.db import models
class UserGroup(models.Model):
title = models.CharField(max_length=32)
class UserInfo(models.Model):
nid = models.BigAutoField(primary_key=True)
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField(default=1)
ug = models.ForeignKey('UserGroup',null=True)
# 在数据库中 ug 这一列的名字 叫 ug_id
- 数据库相关操作:
# 添加
def index2(request):
from app01 import models
models.UserGroup.objects.create(title='销售部')
models.UserInfo.objects.create(
username='winter',
password='ab123456',
age=22,
ug_id =1
)
return HttpResponse('ok')
# 查找
def index2(request):
from app01 import models
group_list = models.UserGroup.objects.all()
# group_list = models.UserGroup.objects.filter(id=1) # filter 相当于sql语句中的where
print(group_list)
for row in group_list:
print(row.id,row.title)
return render(request,'index2.html',{'group_list':group_list})
# 神奇的双下划线
group_list = models.UserGroup.objects.filter(id=1)
group_list = models.UserGroup.objects.filter(id__gt=1) # 大于
group_list = models.UserGroup.objects.filter(id__lt=1) # 小于
# 删除
models.UserInfo.objects.filter(nid=1).delete()
# 更新
models.UserGroup.objects.filter(nid=1).update(title='技术部门')
# models.py
class UserType(models.Model):
title = models.CharField(max_length=32)
class UserInfo(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
ut = models.ForeignKey('UserType')
# 正向操作
# result = models.UserInfo.objects.all()
# for row in result:
# print(row.id,row.name,row.ut.title)
# 反向操作
obj = models.UserType.objects.all().first()
print(obj.title)
print('-----')
for row in obj.userinfo_set.all():
print(row.name,row.age)
return HttpResponse('ok')