no, I didn't dive into sqlalchemy to read the source code 2016-04-16 6:41 GMT+08:00 Bo Yang <[email protected]>:
> 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.
