相关疑难解决方法(0)

SQLAlchemy:级联删除

我必须在SQLAlchemy的级联选项中遗漏一些简单的东西,因为我无法通过简单的级联删除来正确操作 - 如果父元素被删除,子元素会持久存在,使用null外键.

我在这里提出了一个简洁的测试用例:

from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Parent(Base):
    __tablename__ = "parent"
    id = Column(Integer, primary_key = True)

class Child(Base):
    __tablename__ = "child"
    id = Column(Integer, primary_key = True)
    parentid = Column(Integer, ForeignKey(Parent.id))
    parent = relationship(Parent, cascade = "all,delete", backref = "children")

engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)

session = Session()

parent = Parent()
parent.children.append(Child()) …
Run Code Online (Sandbox Code Playgroud)

python database sqlalchemy

88
推荐指数
7
解决办法
5万
查看次数

如何CASCADE从子表删除到父表?

我准备了一个演示问题的小提琴.

CREATE TABLE parent (
   parent_id integer primary key
);

CREATE TABLE child (
   child_name TEXT primary key,
   parent_id integer REFERENCES parent (parent_id) ON DELETE CASCADE
);

INSERT INTO parent VALUES (1);
INSERT INTO child VALUES ('michael',1), ('vanessa', 1);
Run Code Online (Sandbox Code Playgroud)

我想要一种删除子记录时删除CASCADE到父记录的方法.
例如:

DELETE FROM child WHERE child_name='michael';
Run Code Online (Sandbox Code Playgroud)

这应该级联到父表并删除记录.

sql postgresql database-design cascade foreign-keys

8
推荐指数
2
解决办法
2万
查看次数