【问题标题】:read oracle sql file using python and fetch results in to CSV file使用 python 读取 oracle sql 文件并将结果提取到 CSV 文件中
【发布时间】:2021-08-12 14:46:22
【问题描述】:

我是 python 的初学者,想从 python 读取一个 sql 文件并将这些结果提取到 CSV 文件中。我尝试使用 CX_oracle 连接到 oracle 数据库。当我直接在代码中给出 sql 查询时,它可以工作。但是,我不确定如何从 python 读取 sql 文件。

这是我直接在代码中进行 sql 查询时起作用的代码:

import csv 
import cx_Oracle
con = cx_Oracle.connect('XCM/XCM@home.com:1500/HOME')
cursor = con.cursor()
csv_file = open("exp.csv", "w")
writer = csv.writer(csv_file, delimiter='|', lineterminator="\n", quoting=csv.QUOTE_NONE)
r = cursor.execute("select * from home_parties where CREATION_DATE >= trunc(sysdate)")
for row in cursor:
    writer.writerow(row)
cursor.close()
con.close()
csv_file.close()

我尝试使用下面的代码从 sql 文件中获取,该文件具有与上面代码中提到的相同的 sql 查询 - sample.sql 但它不起作用

import csv
import cx_Oracle
con = cx_Oracle.connect('XCM/XCM@home.com:1500/HOME')
cursor = con.cursor()
csv_file = open("exp.csv", "w")
writer = csv.writer(csv_file, delimiter='|', lineterminator="\n", quoting=csv.QUOTE_NONE)
f = open('C:/Users/home1/sample.sql')
full_sql = f.read()
r = cursor.execute(full_sql)
for row in cursor:
    writer.writerow(row)
cursor.close()
con.close()
csv_file.close()

请帮帮我!!

【问题讨论】:

  • 定义“无效”。你收到错误了吗?如果是这样,什么错误?在哪一行?

标签: python sql oracle csv cx-oracle


【解决方案1】:

sql文件的内容可能会在for循环line中被line读取,例如

import csv 
import cx_Oracle
con = cx_Oracle.connect('XCM/XCM@home.com:1500/HOME')
cursor = con.cursor()

sql=""
with open("C:/Users/home1/sample.sql") as f_in:
    for line in f_in:
        sql += line

f_out = open("exp.csv", "w")
writer = csv.writer(f_out, delimiter='|', lineterminator="\n", quoting=csv.QUOTE_NONE)
cursor.execute(sql)
for row in cursor:
    writer.writerow(row)
cursor.close()
con.close()
f_out.close()
f_in.close()

考虑将 SQL 语句分散到多行

【讨论】:

    【解决方案2】:

    假设您在同一目录中有一个 sample.sql 文件,其中第一行是查询。这将从该文件中读取 SQL 查询,然后执行查询并将结果保存到名为“exp.csv”的 CSV 文件中。

    import cx_Oracle
    con = cx_Oracle.connect('XCM/XCM@home.com:1500/HOME')
    cursor = con.cursor()
    
    import pandas as pd
    with open('sample.sql') as f:
        sql_query_string = f.readline();
    sql_query = pd.read_sql_query(sql_query_string, con)
    
    sql_query.to_csv("exp.csv", sep='|')
    

    【讨论】:

    • 感谢您的帮助。但我不希望在代码中看到 sql 查询。我的实际 SQL 查询非常大。因此,我不想将 sql 查询直接放在代码中,而是将其用作文件,Python 应该读取该 SQL 文件 - sample.sql 并将数据检索到 CSV 中。能否请您帮助如何从 Python 读取 SQL 文件并将数据提取到 CSV 文件中。
    • 如果我对你的理解正确的话,这就可以了。
    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多