【发布时间】:2018-11-26 19:58:01
【问题描述】:
请告诉我如何以与在 TABLE 上使用 SQLAlchemy 类似的方式从 VIEW 中选择和操作行。
如果 name_address_vw 是一个表,我将执行以下查询(引擎已经使用 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 的关键成员 我知道这是因为它是一个视图,而不是一个表格。
以下是用于设置和填充后端 PostgreSQL 的 SQL 语句:
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;
显然,我给出的示例是高度简化的,一旦我检索到它们,我需要能够查询视图行上的其他列,因此请为我提供一个通用解决方案,而不是仅适用于此示例的解决方案.非常感谢。
【问题讨论】:
标签: python postgresql sqlalchemy