Ошибка использования SqlSoup с представлениями базы данных

Я хотел бы использовать SqlSoup с существующей базой данных, содержащей представления. Доступ к таблице идет плавно, но доступ к результатам просмотра в «PKNotFoundError: table» [viewname] «не имеет определяемого первичного ключа …»

Правильно ли вы заключаете, что SqlSoup не работает с представлениями базы данных (по крайней мере, по умолчанию)? Я не смог найти что-либо прямое релевантное в списке рассылки Google, SO или SqlAlchemy. Если бы вы столкнулись с этим, как бы вы поступите, если хотите получить доступ к невосстанавливаемым представлениям? Я новичок в 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() 

Это общедоступная база данных. Вы можете запускать эквивалентные запросы с помощью 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' 

3 Solutions collect form web for “Ошибка использования SqlSoup с представлениями базы данных”

Спасибо Рэнди за подсказку map (). Вот полное решение, которое вы можете попробовать verbatim (база данных общедоступна):

 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.

См. Ссылки:

От Майкла Байера:

Вам нужно будет передать столбцы, которые будут считаться частью первичного ключа для базового модуля, используя sqlsoup.map_to (), но, к сожалению, на данный момент для этого нет простого интерфейса, так как вам нужен объект Table, а также получить в столбцах. Поэтому, пока этот интерфейс не будет улучшен, на данный момент это будет выглядеть так:

metadata = u._metadata t = Таблица ("pseqaliases", метаданные, autoload = True)

u.map_to ("pseqaliases", selectable = t, mapper_args = {"primary_key": [tccol1, tccol2]})

Это просто аргумент «primary_key» для mapper, есть несколько примеров на http://www.sqlalchemy.org/docs/orm/mapper_config.html в верхней части.

http://groups.google.com/group/sqlalchemy/browse_thread/thread/fc1e8d079e10bac8

Я попробовал метод map_to (), но все еще получил ошибку PK. Однако следующий метод работал нормально:

 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) 

Что-то вроде этого (непроверено):

 from sqlalchemy import sql from sqlalchemy.ext.sqlsoup import SqlSoup u = SqlSoup('postgresql+psycopg2://PUBLIC@unison-db.org:5432/unison') pseq_id = sql.column('pseq_id') aliases = u.bind.execute(sql.select([pseq_id, '*'], from_obj=['pseqalias'])\ .where(pseq_id==76)).fetchall() 

Конечно, вы можете сделать так:

 aliases = u.bind.execute('select * from pseqalias where pseq_id=76').fetchall() 

… но в этом случае вы теряете возможность повторного использования.

  • Запрос, чтобы проверить, равен ли размер коллекции 0 или пустой в SQLAlchemy?
  • Использование DATEADD в sqlalchemy
  • Sqlalchemy - как получить raw sql из операторов insert (), update () с привязанными параметрами?
  • Динамическое поле выбора с использованием WTForms, не обновляющего
  • Поиск лучшей стратегии для SQLAlchemy bulk upsert
  • Что такое генеративный метод?
  • Прокси-сервер SQLAlchemy с двунаправленной связью
  • SQLAlchemy устанавливает значение по умолчанию nullable = False
  •  
    Interesting Posts for Van-Lav

    Каков наилучший способ захвата / разбора аргументов командной строки, переданных в скрипт Python?

    странный объект 'str' не вызываемый python

    Почему объект pylint указывает на имена имен одиночных символов?

    Администратор Django зависает (до ошибки тайм-аута) для конкретной модели при попытке редактировать / создавать

    что-то вроде тройной кавычки python в F # (или C #)?

    Как добавить readonly inline в django admin

    Поиск красного цвета с использованием Python & OpenCV

    Python & Pygame: столкновение шаров с внутренностью круга

    Элементы списка печати на новой строке

    Как регистрировать исключения в appengine?

    Генератор Python для возврата серии раз

    Как проверить, существует ли n-й элемент в списке Python?

    Получение виртуальной env-ошибки python после установки Lion

    Имеет ли назначение с расширенными индексами данных массива индексирования?

    Удаление неразрывных пробелов из строк с использованием Python

    Python - лучший язык программирования в мире.