欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ORM-外键关联基本使用

程序员文章站 2022-05-05 16:33:08
...

外键

  • 在Mysql中,外键可以让表之间关系变得更加紧密, 在SQlAlchemy中, 通过ForeignKey类来实现,并且可以指定表的外键约束

  • FroeignKey的导入

from sqlalchemy import ForeignKey
  • 在从表中条件一个模型类.字段(属性)即可
    ORM-外键关联基本使用
uid = Column(数据类型(必须跟绑定主表类型一致), ForeignKey("表名.属性", ondelete="删除约束"))

外键关联的代码和示例图

图说明

ORM-外键关联基本使用

外键约束的删除
  • 如果删除了主表中的数据, 从表的数据会怎么样? 需要设置
  1. "RESTRICT" : 主表数据被删除, 会阻止删除
  2. "NO ACTION: 在mysql中, 同 RESTRICT"
  3. "CASEADE" 级联删除, 如果主表删除了数据, 从表的数据也会跟在一起都删除
  4. "SET NULL" 主表数据被删除, 从表数据会设置为NULL
代码
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

HOST = "127.0.0.1"
PORT = "3306"
DATABASE = "test_sql"
USERNAME = "root"
PASSWORD = "root"

DB_URI = "mysql+mysqlconnector://{username}:{password}@{host}:{post}/{db}?charset=utf8".format(username=USERNAME, password=PASSWORD, host=HOST, post=PORT, db=DATABASE)

# 创建数据库引擎
engine = create_engine(DB_URI)

Base = declarative_base(engine)

session = sessionmaker(engine)()


class User(Base):
    __tablename__ = "user"
    id = Column(Integer, autoincrement=True, primary_key=True)
    username = Column(String(20), nullable=False)


class Fiction(Base):
    __tablename__ = "fiction"
    id = Column(Integer, primary_key=True, autoincrement=True)
    fiction_name = Column(String(20), nullable=False)

    uid = Column(Integer, ForeignKey("user.id", ondelete="CASCADE"))


# Base.metadata.drop_all()
# Base.metadata.create_all()
user = User(username="辰东")
session.add(user)
session.commit()

fiction = Fiction(fiction_name="遮天", uid=1)
session.add(fiction)
session.commit()


# fiction = Fiction(fiction_name="完美世界", uid=session.query(User).get(1).id)
# session.add(fiction)
# session.commit()

相关标签: flask