0在Python脚本中调用Django环境、

import osif __name__ == '__main__':    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "工程名.settings")    import django    django.setup()    from app01 import models

1 创建多表模型(详情见代码)
  #用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id

class Zuozhe (models.Model):    id = models.AutoField (primary_key=True)    name = models.CharField (max_length=32)    xiang = models.OneToOneField (to='Xiang', to_field='id')

# ManyToManyField会自动创建第三张表:格式如下

class Zuozhe (models.Model):    id = models.AutoField (primary_key=True)
class Books (models.Model):    id = models.AutoField (primary_key=True)    name = models.CharField (max_length=32)    price = models.DecimalField (max_digits=5, decimal_places=2)    banse = models.ForeignKey (to=Banse, to_field='id')

    zuozhe = models.ManyToManyField (to='Zuozhe')

# *************重点
  # 一对一的关系:OneToOneField
  # 一对多的关系:ForeignKey
  # 多对多的关系:ManyToManyField
  
 2 添加表记录
  1 一对多create
   -两种方式:
    -publish=对象 #创建时的字段=对象
    -publish_id=id #数据库里的实际字段=id

models.Book.objects.create(name='红楼梦',price=34.5,publish_id=1)publish=models.Publish.objects.get (pk=1)models.Book.objects.create (name='西游记', price=34.5, publish=publish)

2 一对多删除:同单表删除 delete()

3 一对多修改:两种方式,可以传对象,可以传id, update()
  4 一对一跟一对多一样
  5 多对多:   注意这里是拿到对象在 增删改
   -add  ----->可以传对象,可以传id,可以传多个

# book=models.Books.objects.filter(name='添加1').first()# book.zuozhe.add(1,2)

-remove  ----->可以传对象,可以传id,可以传多个
   -clear  ---->没有参数
   -set   修改 ----->必须传可迭代对象(一般列表),列表里面可以是对象,可以是id (举例:这本书的作者,set([1,2,3] 表里有就不改动了,没有添加,这本书之前的其他作者删除))

book=models.Books.objects.filter(name='添加1').first()book.zuozhe.set ([3, 2, 1])

3 基于对象的跨表查询: 对象。跨表/跨表_set--->object对象 | None | None。all() 拿到一个queryset对象
  1 一对一 :没有all,没_set
   正向:正向查询按字段

# lqz=models.Zuozhe.objects.filter(name='lqz').first()# print(lqz.xiang.address)

反向:反向查询按表名小写

# phone=models.Xiang.objects.filter(phone='120').first()# print(phone.zuozhe.name)

2 一对多
   正向:正向查询按字段
   反向:反向按表名小写_set.all()
  3 多对多
   正向:正向查询按字段

# book=models.Books.objects.filter(name='水浒传').first()# print(book.zuozhe.all())# for i in book.zuozhe.all():#     print(i.name)

反向查询:反向按表名小写_set.all()

lqz=models.Zuozhe.objects.filter(name='lqz').first()pp=lqz.books_set.all()print(pp)for i in pp :    print(i.name)

4******基于对象的查询,多次查询(子查询)

总结: 多个.all()或者小写表名_set.all()

4 基于双下划线的跨表查询 
  -连表查询
  -一对一双下划线查询
   -正向:按字段,跨表可以在filter,也可以在values中
   -反向:按表名小写,跨表可以在filter,也可以在values中

# models.Books.objects.filter(name__startswith='红').values('zuozhe__xiang__address').filter(zuozhe__xiang__address__startswith='北').values('zuozhe__xiang__sex')

5.修改

models.User.objects.filter(id=1).update(name='wd')

转载于:https://www.cnblogs.com/3sss-ss-s/p/9954210.html

最新文章

  1. 数据结构:最大子序列和
  2. nodejs 全局变量和全局对象
  3. 震惊!这些喵星人竟然被集体包养!
  4. 三 s5p4418对mcp2515 can总线的支持
  5. HDU 3264 Open-air shopping malls
  6. 在 Linux 下打包命令 tar 和压缩命令 7z 的配合使用示例
  7. 99%算法工程师不知道的if/else优化技巧
  8. elasticsearch 查看索引_ElasticSearch 索引基本操作
  9. 一定备足货!卢伟冰再曝红米骁龙855旗舰:性价比之王
  10. 都安排上了!春晚主持阵容、春晚直播平台、春晚餐桌C位
  11. Maven generate/构建项目太慢解决方法
  12. java 中之循环(for while do-while)详解
  13. 微服务 API 网关建设,实践经验分享!
  14. Javascript 笔记与总结(2-8)对象2
  15. Java - Java Mail邮件开发(3)spring +Java Mail + Velocity
  16. 多节点Linux部署
  17. idea设置控制台为单独的窗口
  18. 软银集团和共享办公空间公司WeWork在日本成立合资公司
  19. c#实现打印快递单-提供源码
  20. numastat命令详解

热门文章

  1. 泛型委托Action与ActionT
  2. Java初级学习(转载http://www.cnblogs.com/biehongli/p/5737612.html)
  3. [转]Linux系统下yum和apt-get的区别
  4. 04JavaScript中函数也是对象
  5. 为DataGrid创建自定义列控件(四)
  6. Android编译笔记一
  7. 关于SDIO接口的wifi和通用SD卡的一些记录
  8. s6-5 TCP 连接的建立
  9. 【鬼网络】之DHCP原理与配置
  10. w25n01g 代码_W25N01GV 驱动