ost*_*ach 5 python database postgresql sqlalchemy pandas
我有一个 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))
...
Run Code Online (Sandbox Code Playgroud)
我可以使用此文件通过执行以下命令在 postgres 数据库中创建一个新模式:
engine = create_engine('postgresql://username:password@path_to_database')
Base.metadata.create_all(engine)
Run Code Online (Sandbox Code Playgroud)
问题是我必须将大量数据加载到这个新创建的数据库中,如果我不删除索引和外键约束,这需要很长时间。但是在我完成插入所有数据后手动删除和手动重新创建它们是一个很大的麻烦,并且消除了使用 SQLAlchemy 创建数据库模式的大部分便利。
我想知道是否有一种方法可以使用SQLAlchemy首先在数据库中创建表,加载数据,然后再次使用SQLAlchemy ORM创建所有索引和外键约束?
| 归档时间: |
|
| 查看次数: |
825 次 |
| 最近记录: |