1. 程式人生 > 其它 >2021/6/17 ORM

2021/6/17 ORM

連線資料庫
databases = {
'default': {
'engine': 'django.db.backends.mysql',
'name': '',
'user': '',
'password': '',
'host': '',
'port': ,
'charset': ''

}
}
__init__.py
import pymysql
pymysql.install_as_MySQLdb()
ORM基礎語法
凡是返回queryset物件的,都可以繼續鏈式操作,使用queryset方法
類 --》 表
物件 --》 記錄
物件屬性 - 記錄的欄位值
在models.py寫入
from django.db import models
class xxx(models.Model):
屬性 = models.欄位名(引數)
在終端啟用
python manage.py makemigrations
python manage.py migrate
常用欄位及引數
IntegerField()
CharField(max_length=32)
AutoField(primary_key=True)
DateField()
DateTimeField()
auto_now=True
auto_now_add=True
BooleanField()
FileField()
DecimalField()
max_digit=
decimal_places=
EmailField()
TextField()

null=True
unique=True
db_index=True
blank=True
primary_key=True
default=''
verbose_name=''
auto_now=True
auto_now_add=True
max_length=
choices=choices變數名
queryset物件.get_choices變數名_display()

OneToOneField()
ForeignKey()
ManyToManyField()
to=''
to_field=''
to_delete=models.
set(值/func)
set_default
set_null
cascade
do_nothing
protect
db_constraint=True
through=''
through_fields=('','')

記錄操作
queryset物件:filter/all/exclude/order_by/reverse/distinct()
values/values_list()
記錄物件:first/last/get()
exists()
count()
檢視sql語句
queryset物件.query
在settings.py放入一段程式碼

測試指令碼
import os
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '目錄名.settings')
import django;django.setup()
from app import models
建立表關係
多對多
全自動
models.ManyToManyField(to='')
全手動
手動構建第三章關係表,在關係表內使用foreignkey來進行外來鍵關聯
不可以使用ORM提供的跨表操作的任何方法
半自動
models.ManyToManyField(to='',through='',through_fields=())
不可以使用add、set、remove、clear
如果ForeignKey設定了null=True,則可以使用remove、clear
關聯表查詢
基於物件
正向
1 vs 1
a = models.xxx.objects.first()
a.key
1 vs n
a = models.xxx.objects.first()
a.key
n vs n
a = models.xxx.objects.first()
a.key.all()
反向
1 vs 1
a = models.xxx.objects.first()
a.表名小寫
1 vs n
a = models.xxx.objects.first()
a.表名小寫_set.all()
n vs n
a = models.xxx.objects.first()
a.表名小寫_set.all()
基於雙下劃線
正向
models.xxx.objects.filter(key__欄位名='')
models.xxx.objects.values('key__欄位名')
反向
models.xxx.objects.filter(表名小寫__欄位名='')
models.xxx.objects.values('表名小寫__欄位名')
關聯表操作
create
update
delete

add()
set()
remove()
clear()