外键及其四种约束讲解

Posted wuheng-123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外键及其四种约束讲解相关的知识,希望对你有一定的参考价值。

技术分享图片

#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:[email protected]: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;

 

以上是关于外键及其四种约束讲解的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中的六种约束:主键约束,外键约束,唯一约束,非空约束,检查约束,默认约束

常见的五种约束

数据库的五种约束

Oracle--数据库中的五种约束

SQL的约束

Erlang 是一种约束逻辑编程语言吗?