1.查詢語句
--sql
select * from class;
select * from class where id =1;
#django
res=models.class.objects.all()
res=models.class.objects.filter(id=1).all()
res=models.class.objects.values('user','age') #返回
res=models.class.objects.values_list('user','age') #返回 [('xx',18)]
res=models.class.objects.first()
2.增加資料
--sql
insert into class values(v1,v2,v3...) --必須保證插入的資料個數與**字段一一對應
insert into class (name,age) values(v1,v2) --必須保證插入的資料與指定的字段一一對應
insert into class (name.,age) values(v1,v2),(v1,v2) --同時插入多條記錄
#django
#[1]
res=models.class.create(name='xx',age=20)
#[2]
userinfo=
res=models.class.create(**userinfo)
#[3]
userinfo=[
models.class(name='xx',age=18),
models.class(name='xx',age=18),
models.class(name='xx',age=18),
models.class(name='xx',age=18),
]models.class.object.bulk_create(userinfo)
3.刪除
--sql
delete from class -- 刪除所有資料
delete from class wwhere id=2 --刪除指定資料
#django
res=models.class.objects.filter(id=2).delete()
4.更新
--sql
update class set 欄位名稱=新的值,欄位名稱=新的值 --修改所有記錄
update class set name='k' where id=1 --修改滿足條件的記錄
#django
res=models.class.objects.filter(id=1).update(name='k')
5.一對一
models.py
class usertype(models.model): # 母表
title = models.charfield(max_length=32, null=true)
class private(models.model): #子表
salary = models.charfield(max_length=32, null=true)
sp = models.onetoonefield('uuser', null=true) #一對一 唯一聯合
views.py:
#從母表查詢子表的資料
# 反向查詢
res.子表表名小寫.子表的欄位名
# 從子表查詢母表的資料
# 正向查詢
res.關聯欄位.母表的欄位名
6.多對多
models.py:
class boy(models.model):
bname = models.charfield(max_length=32)
class girl(models.model):
gname = models.charfield(max_length=32)
class b2g(models.model):
b = models.foreignkey("boy", null=true)
g = models.foreignkey("girl", null=true)
class meta:
### 聯合唯一索引
unique_together = [
("b", 'g')
]### 聯合索引:
index_together = [
('b', 'g')
]views.py:
bulk_create()
新增資料的時候, 兩種方式:
bobj = models.boy.objects.filter(bname='k').first()
gobj = models.girl.objects.filter(gname='j').first()
# models.boy2girl.objects.create(b_id=bobj.id, g_id=gobj.id)
models.boy2girl.objects.create(b=bobj, g=gobj)
1. 自己寫第三張表
查詢:查詢和雷俊約會的姑娘
#需求: 查詢一下和k約會的姑娘
#1.res = models.boy.objects.filter(bname='k').first()
love_list = res.boy2girl_set.all()
for love in love_list:
print(love.g.gname)
#2.res = models.boy2girl.objects.filter(b__bname='k').all()
print(res) ### [obj, obj,....]
for love in res:
print(love.g.gname)
#3.res = models.boy2girl.objects.filter(b__bname='k').values('g__gname').all()
print(res) ### [{}]
2. 不寫第三張表, 使用manytomanyfield
models.py:
class boy(models.model):
bname = models.charfield(max_length=32, null=true)
g = models.manytomanyfield('girl', null=true)
class girl(models.model):
gname = models.charfield(max_length=32, null=true)
views.py:
res = models.boy.objects.filter(bname='k').first()
### 新增
# res.g.add(1)
# res.g.add(2,3)
### 刪除
# res.g.remove(3)
### 查詢
# res = models.boy.objects.filter(bname='k').first()
# print(res.g.all()) ####
### 清除
res.g.clear() ### 清空所有的記錄
推薦:第一種
因為第二種方式, 字段只能生成兩個, 將來擴充套件的時候, 很不方便
因此還是使用第一種方式
Django執行SQL語句
1 manager.raw raw query,params none,translations none print p john smith jane jones 這個方法接受乙個原始的sql查詢,執行它,並返回乙個django.db.models.query。rawqueryset例項。這個r...
django中sql語句的查詢
執行原始sql查詢 當 模型查詢api 不要走得足夠遠,你 可以回到寫原始sql。django提供了兩種方式執行原始 sql查詢 您可以使用 manager.raw 來 執行原始查詢和 回歸模型例項 或者你可以完全避免模型層 執行自定義sql直接 執行原始查詢 的 生 經理的方法可以用來執行原始的s...
Django執行原生SQL語句
msg show successfully error tag 0 用connection庫 和原生的sql語句讀資料庫,如下 from django.db import connection 匯入connection sql str select from book str型別的原生sql語句 c...