如何在SQLAlchemy的create_all()中指定Oracle表空间大小及调整?
关于SQLAlchemy与Oracle表空间的两个问题解答
1. 使用schema.create_all()时能否指定Oracle表空间大小?
create_all()方法本身没有直接参数用来指定表空间大小,但可以通过以下两种方式实现需求:
- 模型定义时绑定已创建的表空间:提前创建好指定大小的表空间,再通过模型的
__table_args__属性指定表所属的表空间。示例代码:
from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class MyTable(Base): __tablename__ = 'my_table' id = Column(Integer, primary_key=True) name = Column(String(50)) # 指定表所属的表空间 __table_args__ = {'tablespace': 'pre_created_tablespace'}
- 先创建表空间再执行
create_all():如果需要在创建表的同时定义表空间初始大小,可先通过SQLAlchemy执行创建表空间的原生SQL,再调用create_all()。示例:
from sqlalchemy import create_engine engine = create_engine('oracle+cx_oracle://user:pass@host:port/service_name') # 执行创建表空间的SQL,指定初始大小与自动扩展规则 with engine.connect() as conn: conn.execute(""" CREATE TABLESPACE my_tablespace DATAFILE 'my_tablespace.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED """) conn.commit() # 基于已创建的表空间生成表 Base.metadata.create_all(engine)
2. 通过SQLAlchemy实现Oracle表空间扩容
SQLAlchemy支持执行原生Oracle SQL命令,直接调用execute()方法执行ALTER TABLESPACE语句即可完成扩容,常见的两种扩容方式示例如下:
- 添加新的数据文件:
with engine.connect() as conn: conn.execute(""" ALTER TABLESPACE my_tablespace ADD DATAFILE 'my_tablespace_02.dbf' SIZE 50M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED """) conn.commit()
- 调整现有数据文件的大小:
with engine.connect() as conn: conn.execute(""" ALTER DATABASE DATAFILE 'my_tablespace.dbf' RESIZE 200M """) conn.commit()
内容的提问来源于stack exchange,提问作者Osman Mamun
相关产品推荐
相关产品推荐

