Thanks Mike, I can confirm this works.

For reference, if anyone is using ORM, you can provide the `info` as an 
attribute to `__table_args__`, like:

class Foo(Base):
    __tablename__ = 'foo'
    name = Column(String(10), primary_key=True)
    __table_args__ = {
        'info': { 
            'oracle_partition': """
                 PARTITION BY HASH(name)
                 ( PARTITION p1 TABLESPACE tbs1
                 , PARTITION p2 TABLESPACE tbs2
                 , PARTITION p3 TABLESPACE tbs3
                 , PARTITION p4 TABLESPACE tbs4
                 )
             """
        }
    }

Best regards,

Matthew

On Thursday, March 23, 2017 at 7:17:13 AM UTC-7, Mike Bayer wrote:
>
> 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] <javascript:> 
> > <mailto:[email protected] <javascript:>>. 
> > To post to this group, send email to [email protected] 
> <javascript:> 
> > <mailto:[email protected] <javascript:>>. 
> > 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