2017-05-02 1 views
0

Ich versuche derzeit SQL-Tabellen mit der Bibliothek sqlalchemy zu generieren.Generierung von Datenbanktabellen mithilfe von sqlalchemy

Ich habe zwei Tabellen: t_volume und t_volume_snapshot

class Volume(...): 
    """ Represent a volume element""" 

    __tablename__ = "t_volume" 

    created_at = Column(DateTime, nullable=False) 
    deleted_at = Column(DateTime, nullable=False) 
    volume_id = Column(String(length=255), nullable=False, primary_key=True) 
    volume_name = Column(String(length=255), nullable=False) 
    volume_type = Column(String(length=255), nullable=False) 
    volume_disk_space = Column(Integer, nullable=False) 

class VolumeSnapshot(...): 
    """ Represent a volume snapshot element""" 

    __tablename__ = "t_volume_snapshot" 

    created_at = Column(DateTime, nullable=False) 
    deleted_at = Column(DateTime, nullable=False) 
    volume_snapshot_id = Column(String(length=255), nullable=False, primary_key=True) 
    volume_snapshot_name = Column(String(length=255), nullable=False) 
    volume_id = Column(String(length=255), ForeignKey("t_volume.volume_id")) 

Ich möchte, dass ein Volume Snapshot auf ein Volumen bezieht sich den Wert volume_id verwenden. Ich habe versucht, die t_volume_snapshot zu definieren. volume_id Spalte als ForeignKey zeigt auf t_volume. volume_id aber alles, was ich bekommen ist

OperationalError: (OperationalError) (1005, "Can't create table 'db.t_volume_snapshot' (errno: 150)") 

ich nicht allgemein sqlalchemy und SQL bin es gewohnt, so bin ich wahrscheinlich etwas ...

Antwort

0

fehlen sollten Sie in der Lage sein, so etwas wie unten

zu tun
class Volume(...): 
    """ Represent a volume element""" 

    __tablename__ = "t_volume" 

    created_at = Column(DateTime, nullable=False) 
    deleted_at = Column(DateTime, nullable=False) 
    volume_id = Column(String(length=255), nullable=False, primary_key=True) 
    volume_name = Column(String(length=255), nullable=False) 
    volume_type = Column(String(length=255), nullable=False) 
    volume_disk_space = Column(Integer, nullable=False) 

    snapshots = relationship("VolumeSnapshot", back_populates="t_volume") 

class VolumeSnapshot(...): 
    """ Represent a volume snapshot element""" 

    __tablename__ = "t_volume_snapshot" 

    created_at = Column(DateTime, nullable=False) 
    deleted_at = Column(DateTime, nullable=False) 
    volume_snapshot_id = Column(String(length=255), nullable=False, primary_key=True) 
    volume_snapshot_name = Column(String(length=255), nullable=False) 
    snapshot_volume_id = Column(String(length=255), ForeignKey("volume_id")) 

Dies sollte eine bidirektionale Verbindung herstellen.

+0

Danke, ich werde es versuchen! (Entschuldigung, das "Hallo" am Anfang hat es beim Kopieren/Einfügen nicht geschafft und ich konnte meinen Beitrag nicht bearbeiten><) – Slash941210

Verwandte Themen