FWIW, I tried the map_to() method but still received the PK error. The following method, however, worked fine:
ss = SqlSoup(db.engine) meta = ss._metadata tbl_vrmf = sa.Table("vRMF", meta, autoload=True) vrmf_pks = [tbl_vrmf.c.dateId, tbl_vrmf.c.ident, tbl_vrmf.c.mnum] vrmf = ss.map(tbl_vrmf, primary_key=vrmf_pks) On Jun 10, 8:18 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > On Jun 9, 2011, at 12:41 AM, Reece Hart wrote: > > > > > > > > > > > I'd like to use SqlSoup with an existing database that contains views. > > Accessing a table goes swimmingly, but accessing a view results in > > "PKNotFoundError: table '[viewname]' does not have a primary key > > defined..." > > > Do I correctly infer that SqlSoup does not work with database views (by > > default, at least)? I've been unable to find anything directly relevant > > on Google, SO, or the SqlAlchemy mailing list. If you were faced with > > this, how would you proceed if you wanted to access non-updatable views? > > I'm new to SQLAlchemy and SQLSoup. > > > Here's a specific example: > > > from sqlalchemy.ext.sqlsoup import SqlSoup > > u = SqlSoup('postgresql+psycopg2://pub...@unison-db.org:5432/unison') > > seq = u.pseq.filter(u.pseq.pseq_id==76).all() # okay > > aliases = u.pseqalias.filter(u.pseqalias.pseq_id==76).all() > > PKNotFoundError: table 'pseqalias' does not have a primary key > > defined... > > You would need to pass the columns to be considered part of the primary key > to the underlying mapper, using sqlsoup.map_to(), but unfortunately there is > not a simple interface for that at the moment, since you need the Table > object as well to get at the columns. So until this interface could be > improved, for now it would look like: > > metadata = u._metadata > t = Table("pseqaliases", metadata, autoload=True) > > u.map_to("pseqaliases", selectable=t, mapper_args={"primary_key":[t.c.col1, > t.c.col2]}) > > This is just the "primary_key" argument to mapper, there are some examples > athttp://www.sqlalchemy.org/docs/orm/mapper_config.htmlnear the top. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.