PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

SQLAlchemy nhiều khóa ngoại trong một lớp được ánh xạ tới cùng một khóa chính

Đã cố gắng loại bỏ các dấu ngoặc kép khỏi Foreign_keys và đưa chúng vào danh sách. Từ tài liệu chính thức về Relationship Configuration: Handling Multiple Join Paths

Đã thay đổi trong phiên bản 0.8:relationship() có thể giải quyết sự không rõ ràng giữa chỉ định các mục tiêu chính trên cơ sở foreign_keys một mình đối số; primaryjoin đối số không còn cần thiết trong tình huống này.

Mã riêng bên dưới hoạt động với sqlalchemy>=0.9 :

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine(u'sqlite:///:memory:', echo=True)
session = scoped_session(sessionmaker(bind=engine))
Base = declarative_base()

#The business case here is that a company can be a stakeholder in another company.
class Company(Base):
    __tablename__ = 'company'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)

class Stakeholder(Base):
    __tablename__ = 'stakeholder'
    id = Column(Integer, primary_key=True)
    company_id = Column(Integer, ForeignKey('company.id'), nullable=False)
    stakeholder_id = Column(Integer, ForeignKey('company.id'), nullable=False)
    company = relationship("Company", foreign_keys=[company_id])
    stakeholder = relationship("Company", foreign_keys=[stakeholder_id])

Base.metadata.create_all(engine)

# simple query test
q1 = session.query(Company).all()
q2 = session.query(Stakeholder).all()


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để đặt lại SUM đang chạy sau khi nó đạt đến một ngưỡng?

  2. Cài đặt PostgreSQL trên Ubuntu 18.04

  3. Hiểu các ràng buộc kiểm tra trong PostgreSQL

  4. Cập nhật hàng loạt / hàng loạt / nâng cấp trong PostgreSQL

  5. Không sử dụng NULL trong PostgreSQL vẫn sử dụng bitmap NULL trong tiêu đề?