【发布时间】:2020-02-20 10:09:44
【问题描述】:
我正在尝试从使用 Python 根据数据库中的其他视图创建的视图中读取数据。
数据库设置:
Redshift-postgres
dev
Schemas
schema_name
Tables
table_name
Views
view_name
Python 代码:
connection=psycopg2.connect("dbname=dev host=redshift.amazonaws.com port=5439 user=user password=password")
cursor = connection.cursor()
schema = "SELECT count(*) FROM schema_name.table_name;"
schema2 = "SELECT count(*) FROM schema_name.view_name;"
result = pd.read_sql(schema, connection)
当我使用schema 运行代码时,它会从表中返回数据,但是当我尝试运行schema2 时,它不会返回任何内容,也不会提供任何错误消息。该脚本不会停止它只是闲置。
当我试图从视图而不是表中获取数据时,我做错了什么吗?
更新
当我运行 schema2 = "SELECT * FROM INFORMATION_SCHEMA.TABLES;" 时,它确实返回以下内容:
table_catalog table_schema table_name table_type
dev schema_name view_name VIEW
它列出了我试图从中读取数据的视图。
我这样创建视图:
CREATE OR REPLACE VIEW schema_name.view_name
AS SELECT *
CASE
WHEN statement
ELSE false
END AS column_name,
FROM schema_name.another_view_name
LEFT JOIN schema_name.another_view_name_2 data_1 ON data_2 = data_3
LEFT JOIN schema_name.another_view_name_3 data_4 ON data_5 = data_6
我已将无关数据命名为data_x,我根据某些条件加入了视图。
【问题讨论】:
-
它不返回整数值,比如 0?
-
schema返回0 100、索引0和行数100。schema2不返回任何内容。我在终端中运行这个脚本,在我运行脚本python3 my_script.py之后它只是空闲。 -
您确定视图应该返回行吗?我的意思是您知道该视图的创建查询吗?您可以先尝试使用 psql 来查看视图返回的结果吗?
-
我写了视图,我知道视图包含行,它还能包含哪些其他类型的信息?只是将
SELECT放在VIEW中,不是吗?或者我无法从创建为SELECT的视图中检索任何信息?我将在原始问题中添加简化的view_name代码。 -
如果您运行用于创建视图(没有
CREATE VIEW)部分的实际查询,它是否返回一个值?如果是这样,如果将其包装在SELECT COUNT(*)查询中会发生什么?
标签: python sql database postgresql amazon-redshift