Here is a recipe using compilation extension (http://docs.sqlalchemy.org/en/rel_1_1/core/compiler.html):

"""
CREATE TABLE sales_hash
  (s_productid  NUMBER,
   s_saledate   DATE,
   s_custid     NUMBER,
   s_totalprice NUMBER)
PARTITION BY HASH(s_productid)
( PARTITION p1 TABLESPACE tbs1
, PARTITION p2 TABLESPACE tbs2
, PARTITION p3 TABLESPACE tbs3
, PARTITION p4 TABLESPACE tbs4
);
"""


from sqlalchemy.schema import CreateTable
from sqlalchemy.ext.compiler import compiles
import textwrap


@compiles(CreateTable, "oracle")
def _add_suffixes(element, compiler, **kw):
    text = compiler.visit_create_table(element, **kw)
    if "oracle_partition" in element.element.info:
        text += textwrap.dedent(
            element.element.info["oracle_partition"]).strip()
    return text


if __name__ == '__main__':
    from sqlalchemy import create_engine, DATE, Table, MetaData, Column
    from sqlalchemy.dialects.oracle import NUMBER

    # use mock strategy just to illustrate this w/o my getting
    # on an oracle box
    def execute_sql(stmt):
        print stmt.compile(dialect=engine.dialect)
    engine = create_engine("oracle://", execute_sql, strategy="mock")

    m = MetaData()
    t = Table(
        'sales_hash', m,
        Column('s_productid', NUMBER),
        Column('s_saledate', DATE),
        Column('s_custid', NUMBER),
        Column('s_totalprice', NUMBER),
        info={
            "oracle_partition": """
                PARTITION BY HASH(s_productid)
                ( PARTITION p1 TABLESPACE tbs1
                , PARTITION p2 TABLESPACE tbs2
                , PARTITION p3 TABLESPACE tbs3
                , PARTITION p4 TABLESPACE tbs4
                )
            """
        }
    )

    m.create_all(engine, checkfirst=False)





On 03/22/2017 10:11 PM, Matthew Moisen wrote:
Hello,

In Oracle we can create a Partitioned Table like the following:

CREATE TABLE sales_hash
  (s_productid  NUMBER,
   s_saledate   DATE,
   s_custid     NUMBER,
   s_totalprice NUMBER)
PARTITION BY HASH(s_productid)
( PARTITION p1 TABLESPACE tbs1
, PARTITION p2 TABLESPACE tbs2
, PARTITION p3 TABLESPACE tbs3
, PARTITION p4 TABLESPACE tbs4
);

Is it possible in SQLAlchemy to define this in the Core or ORM? Note that this 
is different from the horizontal/vertical sharding supported in SQLAlchemy
<http://docs.sqlalchemy.org/en/latest/orm/persistence_techniques.html?highlight=partition#partitioning-strategies>.

Checking the docs
<http://docs.sqlalchemy.org/en/latest/core/metadata.html?highlight=prefixes#sqlalchemy.schema.Table>
 for `Table`, I did not see any "postfixes" or similar.

Likewise in the Oracle Dialect page
<http://docs.sqlalchemy.org/en/latest/dialects/oracle.html>, it didn't mention 
table partitions.

I took a look at the Customizing DDL 
<http://docs.sqlalchemy.org/en/latest/core/ddl.html> page, but it appears that 
this only allows you to ALTER TABLE after it has already been created - but in Oracle 
it is not possible to alter a table to be partitioned.

Thanks and best regards,

Matthew

--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and
Verifiable Example. See http://stackoverflow.com/help/mcve for a full
description.
---
You received this message because you are subscribed to the Google
Groups "sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- You received this message because you are subscribed to the Google Groups "sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to