当前位置: 首页 > news >正文

网站设计制作的服务机构网站管理公司排名

网站设计制作的服务机构,网站管理公司排名,2021年最新热点素材,北京seo平台前面的文章中讲解了外键的基础知识和操作#xff0c;上一篇文章讲解了sqlalchemy的基本操作。前面两篇文章都是作为铺垫#xff0c;为下面的文章打好基础。记得初一时第一次期中考试时考的不好#xff0c;老爸安慰我说#xff1a;“学习是一个循序渐进的过程”#xff0c;… 前面的文章中讲解了外键的基础知识和操作上一篇文章讲解了sqlalchemy的基本操作。前面两篇文章都是作为铺垫为下面的文章打好基础。记得初一时第一次期中考试时考的不好老爸安慰我说“学习是一个循序渐进的过程”而我的就是按照这样思路来学习数据库外键。首先是了解外键基础理论然后是sqlalchemy基本操作最后才到sqlalchemy操作外键。 一、sqlalchemy体现的外键特性 1.外键回顾 外键的出现是因为两张表之间需要有关联为了保证数据的完整性和唯一性而产生的。有外键时会有两张以上的表分为主表和附表。附表中数据往往是主表中数据的延伸附表中有外键关联到主表的主键上。 在sqlalchemy的ORM模型中定义表时指定主键和外键。   主键定义在字段信息后面加上primary_keyTrue name Column(String(20),primary_keyTrue)   外键定义在字段后面加上Foreignkey(主表.主键) company_name Column(String(32),ForeignKey(company.name)) company relationship(Company,backrefphone_of_company) 另外在定义主键时往往还会定义一个relationship什么作用呢下文见分晓。   2.定义表 定义两张表company和phonecompany中的name是主键phone中的id是主键并且phone中定义company_name外键。 sql_foreign_models.py 1 #coding:utf-82 3 from sqlalchemy import create_engine4 from sqlalchemy.ext.declarative import declarative_base5 from sqlalchemy import Column,Integer,String,DATE,ForeignKey #导入外键6 from sqlalchemy.orm import relationship #创建关系7 8 engine create_engine(mysqlmysqldb://root:123localhost:3306/test,9 encodingutf-8) 10 11 Base declarative_base() #生成orm基类 12 13 class Company(Base): 14 15 __tablename__ company 16 17 name Column(String(20),primary_keyTrue) 18 location Column(String(20)) 19 20 def __repr__(self): 21 return name:{0} location:{1}.format(self.name,self.location) 22 23 class Phone(Base): 24 25 __tablename__ phone 26 27 id Column(Integer,primary_keyTrue) 28 model Column(String(32)) 29 price Column(String(32)) 30 company_name Column(String(32),ForeignKey(company.name)) 31 company relationship(Company,backrefphone_of_company) 32 33 def __repr__(self): 34 return {0} model:{1},sales:{2} sales:{3} price:{4}.format(self.id,self.model,self.sales,self.price) 35 36 Base.metadata.create_all(engine) #创建表   3.创建表 python sql_foreign_models.py     4.插入数据 sql_foreign_insert.py 1 #coding:utf-82 3 from sql_foreign_models import * 4 from sql_insert import *5 6 companys {7 Apple:Amercian,8 Xiaomi:China,9 Huawei:China, 10 Sungsum:Korea, 11 Nokia:Finland 12 } 13 14 phones ( 15 [1,iphoneX,Apple,8400], 16 [2,xiaomi2s,Xiaomi,3299], 17 [3,Huaweimate10,Huawei,3399], 18 [4,SungsumS8,SungSum,4099], 19 [5,NokiaLumia,Nokia,2399], 20 [6,iphone4s,Apple,3800] 21 ) 22 23 24 for key in companys: 25 26 new_company Company(namekey,locationcompanys[key]) 27 insert(new_company) 28 29 for phone in phones: 30 id phone[0] 31 model phone[1] 32 company_name phone[2] 33 price phone[3] 34 35 new_phone Phone(idid,modelmodel,company_namecompany_name,priceprice) 36 insert(new_phone) 写入数据库 python sql_foreign_insert.py   5.sqlalchemy外键操作 总结外键的优点有两个保证数据的完整性和保证数据的一致性。那么在sqlqlchemy如何体现完整性和一致性呢?通过数据的插入和删除来体现。   完整性附表插入数据时会检查外键所在字段在主表中是否存在 在phone表中插入数据7Blackberry“RIM”3200黑莓手机所在公司是RIM。 new_phone Phone(id7,modelBlackBerry,company_nameRIM,price3200) insert(new_phone) 报错不能添加或者更新一个子行有一个外键关联。 因为主表company的主键也就是phone外键关联的字段没有“RIM”所以当phone写入数据时会检查company_name字段的值是否在company中存在。而company中不存在该值所以不能写入。这样做就保证了数据的完整性。   一致性一致性的规则有多个具体如下引用 外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于在定义子表的外键时指定的on update/on delete子句, InnoDB支持种方式, 分列如下. cascade方式 在父表上update/delete记录时同步update/delete掉子表的匹配记录 On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用. set null方式  在父表上update/delete记录时将子表上匹配记录的列设为null 要注意子表的外键列不能为not null On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用. No action方式 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 这个是ANSI SQL-92标准,从mysql4.0.8开始支持. Restrict方式 同no action, 都是立即检查外键约束 删除主表中的nameSungsum的记录。 1 engine create_engine(mysqlmysqldb://root:123localhost:3306/test) 2 3 DBSession sessionmaker(bindengine) 4 session DBSession() 5 6 company session.query(Company).filter_by(nameSungsum).first() 7 session.delete(company) 8 session.commit()     默认的外键关联的动作是  “.set null”即主表删除数据附表中关联的字段设为空。  除了默认的设置外还可以选择 1、删除主表数据如果附表有记录则不允许删除 2、删除主表数据如果附表有记录则一并删除      二、外键和查询 在数据结构上外键对连表查询并没有太多的帮助但是在sqlalchemy的模型下外键对连表查询有一定的优化那就是relationship字段其配合外键一起使用。 在没有relationship字段时如果想要查询xiaomi2s手机的生产公司的地址如何查询呢分为两步走 查询出phone表中xiaomi2s的company_name字段通过company_name字段查询company表中的location字段。phone.company_namecompany.name有了relationship之后就不用分为两步走了只需要一步就能搞定。在定义表的模型时relationship将company和phone表关联在一起。phone表中定义 company_name Column(String(32),ForeignKey(company.name)) company relationship(Company,backrefphone_of_company)   表明将phone表和Company表联系在一起。backref是反向关联使用规则是 查询phone表返回phone_obj可以通过phoen_obj.Company查询到company中外键关联的数据。这个称之为正向查询。查询company表返回company_obj可以通过company_obj.phone_of_company查询到phone表的外键关联数据。这个称之为反向查询。  1.正向查询 1 #coding:utf-82 3 from sqlalchemy.orm import sessionmaker4 from sqlalchemy import create_engine5 from sql_foreign import *6 7 8 engine create_engine(mysqlmysqldb://root:123localhost:3306/test,)9 Session_class sessionmaker(bindengine) 10 session Session_class() 11 #查询phone表 12 phone_obj session.query(Phone).filter_by(id 1).first() #通过phone表关联的relationship字段Company查询出company表的数据 13 print(phone_obj.company.name) 14 print(phone_obj.company.location) 通过查询phone得到company表中的字段起作用的是relationship中的Company字段。   2.反向查询 1 #coding:utf-82 3 from sqlalchemy.orm import sessionmaker4 from sqlalchemy import create_engine5 from sql_foreign_models import *6 7 8 engine create_engine(mysqlmysqldb://root:123localhost:3306/test,)9 Session_class sessionmaker(bindengine) 10 session Session_class() 11 12 #查询company表 13 company_obj session.query(Company).filter_by(name Nokia).first() 14 #通过phone表关联的relationship的字段backrefphone_of_company,查询phone表数据 15 print company_obj.phone_of_company[0].id 16 print company_obj.phone_of_company[0].model 17 print company_obj.phone_of_company[0].price 18 print company_obj.phone_of_company[0].company_name 通过查询company得到phone表中的字段起作用的是relationship中的phone_of_compamy字段。   外键还有更多操作比如在删除主表时附表的动作。等到下次需要使用时再补上我相信不会等太久。 转载于:https://www.cnblogs.com/goldsunshine/p/9269880.html
http://www.pierceye.com/news/890354/

相关文章:

  • 写一张营销型网站页面多长时间微动漫怎么制作
  • 网站架构设计师月薪多少柳州团购网站建设
  • 深圳宝安沙井网站建设网络营销推广主要做什么?有哪些方法和技巧?
  • 图书馆门户网站建设的意义开票 网站建设
  • 如何用家用电脑做网站wordpress的伪静态
  • 东营市城市和建设管理局网站网络基础知识点
  • 怎么制作网站链接转发视频网页游戏开服表怎么取消
  • 360网站seo怎么做北京商场关闭通知
  • 连云港建设公司网站工程承包信息
  • 互动网站制作建设医院网站服务
  • 用asp做网站span增城高端网站建设
  • 数据交易网站开发网站流量超
  • 做短视频网站用哪家cms湖州高端网站设计
  • 做肝病科网站张家港高端网站制作
  • 深圳外网站建设网站的策划分析
  • 电商网站建设机构移动通网站建设
  • 网站内容不被收录企业网站制作的市场
  • 个人网站 jsp 域名空间电商线上推广
  • 网站开发实战视频教程西安网站建设定
  • 有没有99块钱做网站邢台做网站的公司哪家好?
  • 物流网站设计与实现制作公司内部募捐网站
  • 新西兰注册公司做网站局域网网站
  • 做外贸要开通哪个网站网站建设模板
  • 广州专业做网站的科技公司维度网络做网站
  • l建设银行网站怎么注册网站
  • 网站设计多少钱wordpress调用菜单代码
  • 成都p2p网站建设手机网站和app有什么区别
  • 人像摄影作品网站怎么做多个网站单点登录
  • 企业网站设计推广方案外贸seo优化方法
  • 广州网站推广找哪家西安网站制作定制