Django和SQL語句的對應參考

2021-10-03 03:30:52 字數 3923 閱讀 6703

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...