python - 将 SqlSoup 与数据库 View 一起使用时出错

标签 python sql postgresql sqlalchemy

我想将 SqlSoup 与包含 View 的现有数据库一起使用。访问表很顺利,但访问 View 会导致“PKNotFoundError:表‘[viewname]’没有定义主键...”

我是否正确推断 SqlSoup 不适用于数据库 View (至少默认情况下)?我无法在 Google、SO 或 SqlAlchemy 邮件列表上找到任何直接相关的内容。如果您遇到这种情况,如果您想访问不可更新的 View ,您将如何进行?我是 SQLAlchemy 和 SQLSoup 的新手。

这是一个具体的例子:

from sqlalchemy.ext.sqlsoup import SqlSoup
u = SqlSoup('postgresql+psycopg2://PUBLIC@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()

这是一个公共(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://PUBLIC@unison-db.org: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。

有关引用,请参阅:

关于python - 将 SqlSoup 与数据库 View 一起使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286704/

相关文章:

python - python 中带有继承的类型注释

SQL 将 STUFF 函数添加到此查询中

sql - 如何在postgres中加入空值填充行

python - 如何在网站上运行 Flask 应用程序

python - 如何通过按键 "continue"或 "exit"程序

python - 如何在 Linux 上快速将大数据从 C++ 发送到 Python?

sql - 如何处理表或 View 不存在异常?

sql - 强制转换规范的字符值无效 (#0) - 我知道问题所在,但不知道如何解决

sql - 如何结束一天?

sql - 是否有 postgres CLOSEST 运算符?