gpt4 book ai didi

python - SQLAlchemy View 处理

转载 作者:行者123 更新时间:2023-11-29 12:34:58 25 4
gpt4 key购买 nike

请告诉我如何从 VIEW 中选择和操作行,就像我在 TABLE 上使用 SQLAlchemy 一样。

如果 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 的关键成员我理解这是因为它是一个 View ,而不是一个表。

以下是设置和填充后端 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;

我给出的示例非常简单,我需要能够在检索到 View 行上的其他列后对其进行查询,因此请为我提供一个通用的解决方案,而不是仅适用于此示例的解决方案——许多谢谢。

最佳答案

reflect的使用MetaData 的参数自 0.8 版以来已被弃用,应替换为更具表现力的 MetaData.reflect()方法,它允许 reflecting views还有:

meta = MetaData(Engine)
meta.reflect(views=True)
nav = meta.tables['name_address_vw']

关于python - SQLAlchemy View 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53480458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com