2017-05-02 91 views
0

我正在尝试使用sqlalchemy库生成SQL表。使用sqlalchemy生成数据库表

我有两个表:t_volumet_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")) 

我想的是一个卷快照是指使用volume_id值的体积。我试图定义t_volume_snapshotvolume_id列作为ForeignKey指向t_volumevolume_id但我得到的是

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

我不习惯的SQLAlchemy和SQL一般,所以我可能失去了一些东西......

回答

0

你应该能够做到像下面

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")) 

这应该建立一个双向连接。

+0

谢谢,我会试试! (对不起,开始时的“hello”在复制/粘贴过程中没有成功,我无法编辑我的帖子><) – Slash941210