微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用SQLAlchemy创建表,但推迟创建索引,直到加载数据

我有一个python文件,它使用sqlAlchemy定义给定数据库中的所有表,包括所有适用的索引和外键约束.
文件看起来像这样:

Base = declarative_base()

class FirstLevel(Base):
    __tablename__ = 'first_level'
    first_level_id = Column(Integer, index=True, nullable=False, primary_key=True, autoincrement=True)
    first_level_col1 = Column(String(100), index=True)
    first_level_col2 = Column(String(100))
    first_level_col3 = Column(String(100))

class SecondLevel(Base):
    __tablename__ = 'second_level'
    second_level_id = Column(Integer, index=True, nullable=False, primary_key=True, autoincrement=True)
    first_level_id = Column(None, ForeignKey(FirstLevel.first_level_id, onupdate='cascade', ondelete='cascade', deferrable=True), index=True, nullable=False)
    second_level_col1 = Column(String(100), index=True)
    second_level_col2 = Column(String(100))
    second_level_col3 = Column(String(100))

class ThirdLevel(Base):
    __tablename__ = 'third_level'
    third_level_id = Column(Integer, index=True, nullable=False, primary_key=True, autoincrement=True)
    first_level_id = Column(None, ForeignKey(FirstLevel.first_level_id, onupdate='cascade', ondelete='cascade', deferrable=True), index=True, nullable=False)
    second_level_id = Column(None, ForeignKey(SecondLevel.second_level_id, onupdate='cascade', ondelete='cascade', deferrable=True), index=True, nullable=False)
    third_level_col1 = Column(String(100), index=True)
    third_level_col2 = Column(String(100))
    third_level_col3 = Column(String(100))

...

我可以通过执行以下命令使用此文件在postgres数据库中创建新模式:

engine = create_engine('postgresql://username:password@path_to_database')
Base.Metadata.create_all(engine)

问题是我必须将大量数据加载到这个新创建的数据库中,如果我不删除索引和外键约束,这需要很长时间.但是,在完成插入所有数据后手动删除并手动重新创建它们是一个很大的麻烦,并且消除了使用sqlAlchemy创建数据库模式的大部分便利.

我想知道是否有办法使用sqlAlchemy首先在数据库中创建表,加载数据,然后再次使用sqlAlchemy ORM来创建所有索引和外键约束?

解决方法:

您可以使用Alembic迁移脚本执行此操作.

>创建初始表/删除现有索引
>加载数据
>添加索引

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐