【问题标题】:How to read a table and Sql query from Oracle in Pandas?如何在 Pandas 中从 Oracle 读取表和 Sql 查询?
【发布时间】:2017-07-26 22:26:48
【问题描述】:

我对 Python 和 pandas 完全陌生。我想将一些表和 Sql 查询从 Oracle 和 Teradata 加载到 pandas Dataframes 并想分析它们。 我知道,我们必须在 Pandas 中创建一些到 Oracle 和 Teradata 的连接字符串。能否请您向我推荐它们并添加示例代码以在其中读取表和 SQL 查询?

感谢您的提前

【问题讨论】:

    标签: oracle python-3.x pandas teradata


    【解决方案1】:

    我没有Oracle服务器,所以以Teradata为例

    这不是唯一的方法,只有一种方法

    • 确保您已安装 Teradata ODBC 驱动程序。步骤请参考Teradata官网,我假设你使用Windows(因为使用SQL Assistant对Teradata进行查询很容易,仅在Windows上)。你可以在ODBC Data Source Administrator查看
    • 通过命令pip install pyodbc 安装pyodbc。这是official website
    • 连接字符串是db_conn_str = "DRIVER=Teradata;DBCNAME={url};UID={username};PWD={pwd}"
    • 获取连接对象conn = pyodbc.connect(db_conn_str)
    • 从 SQL 查询中读取数据到 DataFrame df = pd.read_sql(sql="select * from tb", con=conn)

    Oracle 类似,需要有驱动和ODBC 连接字符串的格式。我知道有一个来自 Teradata 的 python 模块也支持连接,但我更喜欢使用 odbc,因为它更通用。

    【讨论】:

    • 非常简洁详细的回答++
    • 谢谢仲代。当我尝试 pip install pyodbc 时,我的语法无效。
    • @Ramsey 使用 pip 安装 Python 包是使用 Python 的基础知识,请参考 Python 基础文档,看看有什么问题。我猜你没有正确的 PATH,或者你没有安装 pip
    【解决方案2】:

    这是一个 Oracle 示例:

    import cx_Oracle   #  pip install cx_Oracle
    from sqlalchemy import create_engine
    
    engine = create_engine('oracle+cx_oracle://scott:tiger@host:1521/?service_name=hr')
    
    df = pd.read_sql('select * from table_name', engine)
    

    【讨论】:

    • 谢谢 MaxU。我正在使用 Windows 机器和 Anacoda。我打开 Anaconda Prompt 并转到 Python3,然后我尝试了 pip install cx_Oracle,但我得到了 pyodbc 和 cx_Oracle 的无效语法错误。请帮我解决这个问题。
    • 你在哪里使用 cx_Oracle 模块?
    【解决方案3】:

    查询 Oracle DB 的一种方法是使用如下函数:

    import pandas as pd
    import cx_Oracle
    
    def query(sql: str) -> pd.DataFrame:
        try: 
            with cx_Oracle.connect(username, password, database, encoding='UTF-8') as connection:
                dataframe = pd.read_sql(sql, con=connection)
            return dataframe
        except cx_Oracle.Error as error: print(error)
        finally: print("Fetch end")
    

    这里,sql 对应于您要运行的查询。由于它是一个字符串,因此它还支持换行符,以防您从 .sql 文件中读取查询 例如:

    "SELECT * FROM TABLE\nWHERE <condition>\nGROUP BY <COL_NAME>"
    

    或者你需要的任何东西......它也可以是一个 f 字符串,以防你使用变量。

    此函数返回一个 pandas 数据帧,其中包含您需要的 sql 字符串的结果。 它还将列名保留在数据框上

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2013-02-10
      • 2020-10-16
      • 2016-06-08
      相关资源
      最近更新 更多