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

import os
if __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')

随机推荐

  1. ZOJ - 3450 Doraemon's Railgun (dp)

    https://vjudge.net/problem/ZOJ-3450 题意 一座位落(X0,Y0)的城市将遭受n个敌人的摧残.现在我们手上有某科学的超电磁炮,每次攻击都是一条射线,对于共线的敌人,必 ...

  2. SVN快速入门笔记【转】

    1. SVN版本控制软件目的 协作开发 远程开发 版本回退 2. 什么是SVN subVersion 支持平台操作 支持版本回退 3. 获取SVN软件 属于C/S结构软件(客户端与服务端) serve ...

  3. IO流----操作文件的9种方法代码实现

    IO流----操作文件的9种方法代码实现: 1:使用字节流读写数据: 四种方式: method1:          每次读写一个字节,边读边写: /* * 复制文本文件. * * 数据源:从哪里来 ...

  4. java代码实现ftp服务器的文件上传和下载

    java代码实现文件上传到ftp服务器: 1:ftp服务器安装: 2:ftp服务器的配置: 启动成功: 2:客户端:代码实现文件的上传与下载: 1:依赖jar包: 2:sftpTools   工具类: ...

  5. 前端常用UI框架

    移动端UI框架 Mint UI(饿了么团队) 中文官网:http://mint-ui.github.io/#!/en 饿了么前端团队推出的基于Vue.js的移动端组件库 GitHub地址:https: ...

  6. None.js 第一步 开启一个服务 hello world

    引入 http 模块 var http = require('http'); 创建服务器 http.createServer(function (request, response) { // 发送一 ...

  7. [译]Managing Vue.js State with Vuex

    原文 准备 安装 Vuex, 是Vue官方出的package, 它不是Vue内置的.需要另外安装. npm install vuex --save 然后,需要在应用启动文件启用Vuex. main.j ...

  8. sqlserver二进制存储

    CREATE TABLE myTable_yq(Document varbinary(max),yq varchar(20)) --SELECT @xmlFileName = 'c:\TestXml. ...

  9. zsh,oh-my-zsh,antigen使用记录

    关于 'zsh': 又名 z shell,‘z' 是26个字母中的最后一位,故取意为“终极终端”. 关于 'oh-my-zsh': 是一个针对zsh的模板化的z shell配置脚本,目标是配置一个好用 ...

  10. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Initialization)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. Initialization Welcome to the first assignment of "Improving D ...