Do you know what kind of interface the custom class needs to provide in
order to use sqlalchemy?

On Tue, Apr 12, 2016 at 8:57 PM GoldenBull Chen <[email protected]>
wrote:

> I have an existing table in Oracle:
> --------------------------------------------------------
> CREATE TABLE test_tbl
> (
>    id     NUMBER,
>    name   VARCHAR2 (100),
>    val    NUMBER,
>    CONSTRAINT test_tbl_pk PRIMARY KEY (id)
> );
> ---------------------------------------------------------
>
>
> In python, I tried to load the table using sqlalchemy, and everything works 
> fine:
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> # -*- encoding: utf8 -*-
>
> from pbtest_pb2 import *
> from sqlalchemy import *
> from sqlalchemy.orm import *
>
> metadata = MetaData()
>
> tbl = Table('TEST_TBL', metadata,
>             Column('id', Integer, primary_key=True),
>             Column('name', String(100)),
>             Column('val', Numeric),
>             )
>
>
> class TestType2(object):
>     pass
>
>
> t = TestType2 # note here, mapped to a custom class
>
> mapper(t, tbl)
> engine = create_engine('oracle+cx_oracle://user:passwd@machine/orcl')
> Session = sessionmaker(bind=engine)
> session = Session()
> for i in session.query(t):
>     print(i.id, i.name, i.val)
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>
>
> And here is the corresponding protobuf definition:
> ---------------------------------------------------------
> syntax = "proto3";
>
>
> message TestType
> {
>   int32 id = 1;
>   string name = 2;
>   double val = 3;
> }
>
> ---------------------------------------------------------
>
>
>
> Now I want to re-use the class generated by proto compiler, so I change
> the class used in mapping:
> ---------------------------------------------------------
>
> t = TestType # now mapped to the generated class
>
> ---------------------------------------------------------
>
>
> Then the piece of code failed with error:
>
> ---------------------------------------------------------
>
> Traceback (most recent call last):
>   File "D:/test/pbtest.py", line 22, in <module>
>     mapper(t, tbl)
>   File "<string>", line 2, in mapper
>   File "C:\Anaconda2\lib\site-packages\sqlalchemy\orm\mapper.py", line 629, 
> in __init__
>     self._configure_pks()
>   File "C:\Anaconda2\lib\site-packages\sqlalchemy\orm\mapper.py", line 1223, 
> in _configure_pks
>     (self, self.mapped_table.description))
> sqlalchemy.exc.ArgumentError: Mapper Mapper|TestType|TEST_TBL could not 
> assemble any primary key columns for mapped table 'TEST_TBL'
> ---------------------------------------------------------
>
>
> Is it possible to reuse the generated class with sqlalchemy?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" 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/protobuf.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" 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/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to