zoukankan      html  css  js  c++  java
  • 外键及其四种约束讲解

    #encoding: utf-8
    
    from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Text,
        ForeignKey
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker
    from random import randint
    
    HOSTNAME = '127.0.0.1'
    
    PORT = 3306
    
    DATABASE = 'first_sqlalchemy'
    
    USERNAME = 'root'
    
    PASSWORD = '123456'
    
    #dialect+driver://username:password@host:port/database
    DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/" 
             "{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)
    
    engine = create_engine(DB_URI)
    
    Base = declarative_base(engine)
    
    # Session = sessionmaker(engine)
    # session = Session()
    
    session = sessionmaker(engine)() #Session(**local_kw)
    
    #父表/从表
    #user/article
    
    
    class User(Base):
        __tablename__ = 'user'
        id = Column(Integer,primary_key=True,autoincrement=True)
        username = Column(String(32),nullable=False)
    
    
    class Article(Base):
        __tablename__ = 'article'
        id = Column(Integer,primary_key=True,autoincrement=True)
        title = Column(String(50),nullable=False)
        content = Column(Text,nullable=False)
        #引用主表的外键一定要跟主表的数据类型相同
        #restrict 本意是拒绝的意思,no action 也是,从表(子表)关联了主表,
        #关联字段 ondelect = 'RESTRICT' 或 ondelect = 'NO ACTION',主表删除会报错,
        #不允许删除
        #如果 设置 ondelect = "CASCADE",主表删除,子表也会随之删除
        #如果 设置 ondelect = "SET NULL",主表删除,子表的关联字段会表设置null
        #也就是uid = null ,还有一种情况就是 nullable 不能设置成False
        uid = Column(Integer,ForeignKey('user.id',ondelete='RESTRICT'))
    
    
    Base.metadata.drop_all()
    
    Base.metadata.create_all()
    
    # 查看 表创建的sql 语句
    # show create table articleG;
    '''
    Create Table: CREATE TABLE `article` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `title` varchar(50) NOT NULL,
      `content` text NOT NULL,
      `uid` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `uid` (`uid`),
      CONSTRAINT `article_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `user` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    '''
    
    
    #添加数据
    user = User(username = 'xiaowu')
    session.add(user)
    session.commit()
    
    article = Article(title = '圣墟',content = '吹牛逼死坑的小说,天天吹水逼',uid = 1)
    session.add(article)
    session.commit()
    
    #删除一条记录的sql  delete from user where id = 1;
  • 相关阅读:
    设计模式-17-迭代器
    设计模式-16-备忘录
    微服务架构设计
    数据库拆分案例
    生成多个git ssh密钥
    分布式数据中间件TDDL、Amoeba、Cobar、MyCAT架构比较
    maven工程 java 实现文件上传 SSM ajax异步请求上传
    MySQL的分区、分表、集群
    Redis实现分布式锁原理与实现分析
    关于消息队列的使用
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/9693727.html
Copyright © 2011-2022 走看看