我正在連接Snowflake
使用python
(下面的代碼)。如您所見,我正在嘗試獲取行數,日期表是從存在于 SNOWFLAKE_SAMPLE_DATA 資料庫中的模式“TPCDS_SF100TCL”的資訊模式中創建和更改的。我的問題不是為每個表撰寫“OR”條件(在下面的示例中:CUSTOMER、CALL_CENTER、CUSTOMER_ADDRESS),我想知道我是否可以在某處提供一個串列并遍歷該串列以獲得“OR”條件。我不確定這是否可能?如果是,請建議帶有解釋的代碼。
提前感謝您的時間和建議!
Python代碼
import pandas as pd
import snowflake.connector
conn = snowflake.connector.connect(
user="MY_USER",
password="MY_PSWD",
account="MY_ACCOUNT",
warehouse="COMPUTE_WH",
database="SNOWFLAKE_SAMPLE_DATA",
schema="INFORMATION_SCHEMA",
role="SYSADMIN"
)
cur = conn.cursor()
try:
cur.execute("SELECT TABLE_NAME,ROW_COUNT,CREATED,LAST_ALTERED FROM TABLES WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_SCHEMA='TPCDS_SF100TCL' AND TABLE_NAME='CUSTOMER' OR TABLE_NAME='CALL_CENTER'
OR TABLE_NAME='CUSTOMER_ADDRESS'")
df = cur.fetch_pandas_all()
finally:
cur.close()
conn.close()
BeRT2me 建議后的代碼 [更新:SO 用戶提供的兩種方法都有效。請參閱下面他建議的代碼]
cur = conn.cursor()
tables = ['CUSTOMER', 'CALL_CENTER', 'CUSTOMER_ADDRESS']
try:
cur.execute(f"""SELECT TABLE_NAME, ROW_COUNT, CREATED, LAST_ALTERED FROM TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA='TPCDS_SF100TCL' AND TABLE_NAME IN ({','.join(tables)})""")
df = cur.fetch_pandas_all()
finally:
cur.close()
conn.close()
uj5u.com熱心網友回復:
如果只是簡化查詢就足夠了,您可以從以下開始:
cur.execute(
"""
SELECT TABLE_NAME, ROW_COUNT, CREATED, LAST_ALTERED
FROM TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_SCHEMA='TPCDS_SF100TCL'
AND TABLE_NAME IN ('CUSTOMER', 'CALL_CENTER', 'CUSTOMER_ADDRESS')
"""
)
如果您想要一種注入串列的pythonic方式,這應該可以:
tables = ['CUSTOMER', 'CALL_CENTER', 'CUSTOMER_ADDRESS']
cur.execute(
f"""
SELECT TABLE_NAME, ROW_COUNT, CREATED, LAST_ALTERED
FROM TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_SCHEMA='TPCDS_SF100TCL'
AND TABLE_NAME IN ({','.join("'" x "'" for x in tables)})
"""
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475241.html