【问题标题】:Fetch Queries from Snowflake table and execute each query using Python从雪花表中获取查询并使用 Python 执行每个查询
【发布时间】:2022-01-18 01:08:35
【问题描述】:

我在 Snowflake 表中存储了查询(如 select * from table),并希望逐行执行每个查询并为每个查询生成一个 CSV 文件。下面是我可以打印查询但不知道如何执行每个查询并创建 CSV 文件的 python 代码:

我相信我已经接近我想要实现的目标。如果有人可以在这里提供帮助,我将不胜感激。

import pyodbc
import pandas as pd
import snowflake.connector
import os

conn = snowflake.connector.connect(
        user = 'User',
        password = 'Pass',
        account = 'Account',
        autocommit = True
        )

try:
    cursor = conn.cursor()
    query=('Select Column from Table;')--This will return two select 
    statements
        output = cursor.execute(query)

    for i in cursor:
        print(i)
    cursor.close()
    del cursor 
    conn.close()
except Exception as e:
    print(e) 

【问题讨论】:

    标签: python snowflake-cloud-data-platform


    【解决方案1】:

    你已经很接近了。只需要执行代码而不是打印,并将数据放入文件中。

    我自己并没有经常使用 pandas,但这是 Snowflake 文档提供的用于运行查询并将其放入 pandas 数据帧的代码。

    cursor = conn.cursor()
    query=('Select Column, row_number() over(order by Column) as Rownum from Table;')
    cursor.execute(query)
    resultset = cursor.fetchall()
    
    for result in resultset:
        cursor.execute(result[0])
        df = cursor.fetch_pandas_all()
    
        df.to_csv(r'C:\Users\...<your filename here>'+ result[1], index = False)
    
    

    可能需要一些摆弄,但这里有几个链接供参考:

    更新:添加了为每条记录创建单独文件的方法示例。这只是为您的 sql 输出的每一行添加一个不同的数字,以便您可以将该数字用作文件名的一部分。最终,您需要在循环中包含一些逻辑来创建文件名,无论是添加随机数、时间戳等。这可以来自 SQL 或 python,由您决定。我可能会在您的表中添加一个文件名列,但我不知道这对您是否有意义。

    【讨论】:

    • 代码更改后,它给我一个错误,如“没有这样的文件或目录:'C:/Users/.../file.csv'”我想动态创建一个 CSV 文件并那太动态的文件创建
    • 看起来 pandas 会创建一个文件,但不会创建不存在的目录。这里有多个有用的答案:stackoverflow.com/questions/47143836/…
    • 好的。现在我可以生成一个 CSV 文件。但现在想为每个查询生成单独的 CSV 文件。就像 2 条 sql 语句一样,应该有 2 个 CSV 文件。
    • 关于如何为每个查询生成单独的 CSV 文件的任何更新?
    • 更新了一个方法示例。实际上,您只需要在循环中对每个文件都不同的东西。即使它只是一个时间戳或一个随机数
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 2022-01-04
    • 1970-01-01
    • 2021-10-02
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多