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')