我想将SqlSoup与包含 View 的现有数据库一起使用。访问表非常容易,但是访问 View 会导致“PKNotFoundError:表'[viewname]'没有定义主键...”

我是否正确推断出SqlSoup不适用于数据库 View (至少默认情况下)?我一直找不到与Google,SO或SqlAlchemy邮件列表直接相关的任何内容。如果遇到此问题,如果要访问不可更新的 View ,将如何处理?我是SQLAlchemy和SQLSoup的新手。

这是一个具体的例子:

from sqlalchemy.ext.sqlsoup import SqlSoup
u = SqlSoup('postgresql+psycopg2://[email protected]:5432/unison')
seq = u.pseq.filter(u.pseq.pseq_id==76).all() # okay
aliases = u.pseqalias.filter(u.pseqalias.pseq_id==76).all()

这是一个公共(public)数据库。您可以使用psql运行等效查询:
psql -h unison-db.org -U PUBLIC -d unison -c 'select * from pseq where pseq_id=76'
psql -h unison-db.org -U PUBLIC -d unison -c 'select * from pseqalias where pseq_id=76'

最佳答案

感谢Randy的map()技巧。这是一个完整的解决方案,您可以逐字尝试(该数据库是公开可用的):

from sqlalchemy.ext.sqlsoup import SqlSoup
from sqlalchemy import Table
u = SqlSoup('postgresql+psycopg2://[email protected]:5432/unison')
pa_t = Table("palias", u._metadata, autoload=True, schema='unison')
pa = u.map(pa_t,primary_key=[pa_t.c.pannotation_id])
pa.slice(0,20).all()

这是与Python 2.7.1,Alchemy 0.7.2一起使用的。

有关引用,请参见:
  • http://www.sqlalchemy.org/docs/core/schema.html?highlight=table#sqlalchemy.schema.Table
  • http://www.sqlalchemy.org/docs/orm/extensions/sqlsoup.html?highlight=map#sqlalchemy.ext.sqlsoup.SqlSoup.map
  • 关于python - 将SqlSoup与数据库 View 一起使用时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6286704/

    10-08 20:46