外键及其四种约束讲解

#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 article\G;
‘‘‘
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;

原文地址:https://www.cnblogs.com/wuheng-123/p/9693727.html

时间: 2024-08-30 18:18:49

外键及其四种约束讲解的相关文章

SQLarchemy 实现外键及其四种约束讲解

一.表关系: 表之间的关系存在三种:一对一.一对多.多对多,而SQLARCHMY中的orm也可以模拟这三种关系. 因为一对一其实在SQLarchemy中底层是通过一对多的方式模拟的,所以先来看下一对多的关系. 外键: 使用SQLarchemy创建外键非常简单,在从表中加一个字段,指定这个字段外键的哪个字就可以了.从表中外键的字段,从表中的外键的字段,必须和主键的主表字段类型保持一致. 二.外键约束有以下几项: 1.restrict:若子表中有父表对应的关联数据,删除父表对应数据,会阻止删除,默认

SQL Server外键关系是强制约束,外键值也可以是空(NULL)

在SQL Server中,实际上外键值可不可以为空(NULL),和外键关系是不是强制约束无关. 我们先在SQL Server数据库中建立两张表People和Car,一个People可以有多个Car,所以这两张表是一对多关系. People建表语句: CREATE TABLE [dbo].[People]( [ID] [int] NOT NULL, [Name] [nvarchar](50) NULL, [Age] [int] NULL, [Sex] [nvarchar](50) NULL, CO

mysql数据库--外键的三种关系

主要内容: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出两张表之间的关系 分析步骤: #1.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #2.再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

外键的三种形式

因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出两张表之间的关系 分析步骤: #1.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #2.再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id) #3.总结: #多对一: 如果只有步骤1成立,则是左表多对一

oracle建表的时候同时创建主键,外键,注释,约束,索引

--主键create table emp (id number constraint id_pr primary key ,name1 varchar(8));create table emp9 (id number ,name1 varchar(8) ,constraint aba_pr primary key(id,name1));--外键create table emp1(id number references emp(id),name varchar(8)); --复合外键create

怎么给一张表添加外键(四种方法)

添加外键约束名字一定不能重复如何添加外键方法一:直接在属性值后面添加 create table score( cscore int(11), st_id int(50) references student(id), cs_id int(30) references classes(id), primary key(st_id,cs_id) ); 方法二: create table score( cscore int(11), st_id int(50), cs_id int(30), prim

添加外键的两种方式

方式一: 创建表的时候添加外键 CREATE TABLE 表名( 属性名 类型...,   CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 父表名(列名) ); 方式二: ALTER添加 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 父表名(列名); 原文地址:https://www.cnblogs.com/laoniaofly/p/8593088.html

三十四:数据库之SQLAlchemy外建及四种约束

使用SQLAlchemy创建外建,只需要在子表的字段中指定此字段的外建是哪个表的哪个字段即可,字段类型需和父表下该字段的类型保持一致 使用ondelete指定约束, 外建约束有以下几种:1.RESTRICT:删除父表数据时,如果子表有数据在使用该字段的数据时,会阻止删除(默认为此约束)2.NO ACTION:在MySQL中,同RESTRICT3.CASCADE:级联删除,删除父表的某一条数据时,子表中使用该外建的数据也会被删除4.SET NULL:父表数据被删除,删除父表的某一条数据时,子表中使

MySQL外键的三种关系

一对多 create table press( id int primary key auto_increment, name varchar(20) ); create table book( id int primary key auto_increment, name varchar(20), press_id int not null, constraint fk_book_press foreign key(press_id) references press(id) on delet