gpt4 book ai didi

python - 使用 SQLAlchemy 创建表,但将索引的创建推迟到数据加载完成

转载 作者:太空狗 更新时间:2023-10-30 01:57:10 25 4
gpt4 key购买 nike

我有一个 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 来做迁移脚本。

  1. 创建初始表/删除现有索引
  2. 加载数据
  3. 添加索引

关于python - 使用 SQLAlchemy 创建表,但将索引的创建推迟到数据加载完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25195224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com