Пожалуйста, скажите мне, как выбирать и манипулировать строками из VIEW аналогично тому, как я использую SQLAlchemy в TABLE.
Вот как я бы сделал запрос, если бы name_address_vw был таблицей (Engine уже установлениспользование JDBC Psycopg2 для базы данных PostgreSQL (не показано):
meta = MetaData(Engine,reflect=True)
nav = meta.tables['name_address_vw']
Session = sessionmaker(bind=engine)
session = Session()
navRow = session.query(
nav
).filter(
nav.c.address.like("%pad%")
).first()
print (navRow.name)
Сбой SQLAlchemy, поскольку name_address_vw не является ключевым членом meta.tables. Я понимаю, что это потому, что это представление, а не таблица.
Вот операторы SQL для настройки и заполнения серверной части PostgreSQL:
CREATE TABLE name
(
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL
);
CREATE TABLE address
(
id SERIAL PRIMARY KEY,
idA INTEGER REFERENCES name(id),
address VARCHAR
);
CREATE VIEW name_address_vw AS SELECT
A.id,
A.name,
B.address
FROM name A
LEFT JOIN address B ON A.id = B.idA;
INSERT INTO name(
id, name)
VALUES
(1, 'John Soap'),
(2, 'Jane Doe');
INSERT INTO address(
id, idA, address)
VALUES
(1, 1, 'John''s place'),
(2, 2, 'Jane''s pad');
В случае, если мой приведенный выше код SQLAlchemy неясен, вот эквивалент запроса PostreSQL:
SELECT name FROM name_address_vw WHERE address LIKE '%pad%' LIMIT 1;
Очевидно, что приведенный мной пример сильно упрощен, и мне нужно иметь возможность запрашивать другие столбцы в строках представления после того, как я их получу, поэтому, пожалуйста, предоставьте мне общее решение, а не то, которое работает исключительно с этимпример.Большое спасибо.