【问题标题】:Database tables generation using sqlalchemy使用 sqlalchemy 生成数据库表
【发布时间】:2017-09-30 04:22:34
【问题描述】:

我目前正在尝试使用 sqlalchemy 库生成 SQL 表。

我有两个表: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_snapshot.volume_id 列定义为指向 t_volume.volume_id 的 ForeignKey,但我得到的只是

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

我一般不习惯 sqlalchemy 和 SQL,所以我可能遗漏了一些东西......

【问题讨论】:

    标签: python sql python-2.7 sqlalchemy


    【解决方案1】:

    您应该能够执行以下操作

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

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

    【讨论】:

    • 谢谢,我试试看! (抱歉,一开始的“你好”在复制/粘贴过程中没有出现,我无法编辑我的帖子>
    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 2014-02-14
    • 2016-11-29
    • 2021-03-27
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多