you can control the whole thing using map_to(): 
https://sqlsoup.readthedocs.org/en/latest/api.html#sqlsoup.SQLSoup.map_to , 
however that would mean you'd need to build the Table reflection outside of 
calling that in any case.

Another approach might be just to subclass the SQLSoup object and override the 
map_to() method, so that you reflect "tablename" ahead of time, then pass it in 
as "selectable":


class MySoup(SQLSoup):
   def map_to(self, attrname, tablename=None, …):
        table = Table(tablename, self._metadata, Column('name', String, 
primary_key=True), autoload=True, autoload_with=self.bind)
        return super(MySoup, self).map_to(attrname, selectable=table, …)

There should be some more event hooks in SQLAlchemy for intercepting the 
primary key.  We currently have hooks to intercept columns as they are 
reflected, but not the actual PK column collection.







On Mar 4, 2013, at 2:16 PM, brent <bpede...@gmail.com> wrote:

> 
> 
> On Monday, 4 March 2013 11:57:01 UTC-7, Michael Bayer wrote:
> Have you looked at SQLSoup ?  This library already does exactly what you're 
> looking for.
> 
> https://sqlsoup.readthedocs.org/en/latest/
> 
> 
> wow! yeah that does do what I'm looking for. 
> However, I'm mapping to tables that do not have primary keys defined. So with 
> SQLSoup, I get:
> 
>      sqlsoup.SQLSoupError: table 'cpgIslandExt' does not have a primary key 
> defined
> 
> I got the same in sqlalchemy if I don't explicitly add the name column to the 
> db. Any way around this?
> 
> 
>> For the most part, I have this working. However, the example in the gist 
>> shows that:
>> 
>>     len(g.cpgIslandExt.all()) != g.cpgIslandExt.count()
> 
> What does your SQL echo output say?   Looking at the queries (and the rows 
> returned, if you use echo='debug') will illustrate what's being sent.
> 
> A typical reason why all() returns fewer rows is when the query returns 
> duplicate primary key identities - returned objects are uniqued on identity 
> as they are received.   The fact that the "name" column is being hardcoded in 
> your base model as the sole "primary key" for all mappings is the likely 
> cause of this even being possible.   The reflection process already knows how 
> to yield the primary key constraints defined on each table so you'd best rely 
> upon that.
> 
> 
> 
> 
> 
> 
> 
> -- 
> 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 sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  

-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to