如何使用SQLAlchemy(而不是flask_SQLAlchemy或flaskmerge)将数据插入到相关的关系表中?

2024-09-26 22:55:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是SQLAlchemy的新手,我正在尝试使用SQLAlchemy构建一个实践项目。我已经创建了包含以下表的数据库。现在我的问题是:

  1. 如何在表中插入数据,因为它们是相互依赖的?在
  2. 这会在数据库设计中形成循环吗?在
  3. 循环数据库的设计是不是一种不好的做法?如果这是一个不好的做法,如何解决这个问题?在

    在部门经理==>;雇员.SSN
    以及
    员工部门编号==>;部门部门

database relationship diagram

下面是创建这个精确数据库的代码的当前版本。在

# Department table
class Departments(Base):
    __tablename__ = "Departments"   

    # Attricutes
    Dname= Column(String(15), nullable=False)
    Dnumber= Column(Integer, primary_key=True)
    Mgr_SSN= Column(Integer, ForeignKey('Employees.ssn'), nullable=False)
    employees = relationship("Employees")

# Employee table
class Employees(Base):
    __tablename__ = "Employees" 

    # Attributes
    Fname = Column(String(30), nullable=False) 
    Minit = Column(String(15), nullable=False)  
    Lname = Column(String(15), nullable=False)  
    SSN = Column(Integer, primary_key=True)
    Bdate = Column(Date, nullable=False)
    Address = Column(String(15), nullable=False)  
    Sex = Column(String(1), default='F', nullable=False)
    Salary = Column(Integer, nullable=False)
    Dno = Column(Integer, ForeignKey('Departments.Dnumber'), nullable=False)
    departments = relationship("Departments")

请仅在SQLAlchemy中提供解决方案,而不是在flask SQLAlchemy或flask migrate中提供,我正在使用python3.6。


Tags: gt数据库falsestringsqlalchemytablecolumninteger
1条回答
网友
1楼 · 发布于 2024-09-26 22:55:12

您可以通过

  • 仅在关系的一侧声明外键约束
  • 使用布尔标志指示员工是否为经理
class Department(Base):
    __tablename__ = 'departments'

    department_id = Column(Integer, primary_key=True)
    employees = relationship('Employee', lazy='dynamic', back_populates='department')    


class Employee(Base):
    __tablename__ = 'employees'

    employee_id = Column(Integer, primary_key=True)
    is_manager = Column(Boolean, nullable=False, default=False)
    department_id = Column(Integer, ForeignKey('departments.department_id'), nullable=False)

    department = relationship('Department', back_populates='employees')

你可以找到部门经理使用

^{pr2}$

相关问题 更多 >

    热门问题