zoukankan      html  css  js  c++  java
  • Django和SQL语句的对应参考

    Django和SQL语句的对应参考

    查询语句

    SQL:
        select * from class;
        select * from class where id=1;
    django:
        res = models.Classes.objects.all()
        res = models.Classes.objects.filter(id=1).all()
        res = models.Classes.objects.values('user','age')  #返回的是一个 [{'user':'xx','age':18}]
        res = models.Classes.objects.values_list('user','age') #返回的是一个[('xx',18)]
        res = models.Classes.objects.first()
    

    增加数据

    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:
        [a].
        res = models.class.objects.create(name='xx',age='11')
        
        [b].
        userinfo={
            'name':'xx',
            'name':'aa'
        }
        res = models.class.objects.create(**userinfo)
        
        [c].
        userinfo = [
            models.class(name='xx',age=18),
            models.class(name='aa',age=11),
            models.class(name='bb',age=12),
            models.class(name='cc',age=13),
            models.class(name='dd',age=14),
        ]
    	models.class.objects.bulk_create(userinfo)
    
    

    删除

    SQL:
        delete from class ;  #删除所有数据
    	delete from class where id=2; #指定删除数据
        
    Django:
        res = models.Boy2Girl.objects.filter(id=2).delete()
       
    

    更新

    SQL:
    	update class  set 字段名称=新的值,字段名称2=值2;   #修改所有记录
    	update class  set 字段名称=新的值,字段名称2=值2  where 条件 ;   #修改满足条件的记录
    
    Django:
        res = models.class.objects.filter(id=2).update(name='kk')
    
    

    一对一

    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.关联字段.母表的字段名
    

    多对多

    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='雷俊').first()
    				gobj = models.Girl.objects.filter(gname='乔碧萝').first()
    
    				# models.Boy2Girl.objects.create(b_id=bobj.id, g_id=gobj.id)
    				models.Boy2Girl.objects.create(b=bobj, g=gobj)
    			
    			
    			1. 自己写第三张表
    			查询:
    				 查询和雷俊约会的姑娘
    				#需求: 查找一下和雷俊约会的姑娘
    				#1.
    				res = models.Boy.objects.filter(bname='雷俊').first()
    				love_list = res.boy2girl_set.all()
    				for love in love_list:
    				     print(love.g.gname)
    				
    				#2.
    				res = models.Boy2Girl.objects.filter(b__bname='雷俊').all()
    				print(res) ### [obj, obj,....]
    				for love in res:
    				     print(love.g.gname)
    				
    				#3.
    				res = models.Boy2Girl.objects.filter(b__bname='雷俊').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='雷俊').first()
    
    							### 添加
    							# res.g.add(1)
    							# res.g.add(2,3)
    							### 删除
    							# res.g.remove(3)
    
    							### 查询
    							# res = models.Boy.objects.filter(bname='雷俊').first()
    							# print(res.g.all())  ####
    
    							### 清除
    							res.g.clear() ### 清空所有的记录
    				
    				推荐:
    					第一种
    					
    					因为第二种方式, 字段只能生成两个, 将来扩展的时候, 很不方便
    					
    					因此还是使用第一种方式
    
  • 相关阅读:
    Exception in thread "main" java.io.IOException: Cannot run program "XX": CreateProcess error
    用eclipse打包mapreduce程序 运行出现解析路径错误的诡异问题
    HTMLParser学习笔记(一)
    Prim算法实现
    hadoop mapreduce 出现找不到 各种类的错误
    搜索引擎的基本原理
    ArrayList 和数组 在mapreduce编程中序列化
    读《做你自己》
    对于通过视频学习编程的建议
    长篇文档排版技巧
  • 原文地址:https://www.cnblogs.com/bladecheng/p/11366047.html
Copyright © 2011-2022 走看看