【问题标题】:Querying from Microsoft SQL to a Pandas Dataframe从 Microsoft SQL 查询到 Pandas 数据框
【发布时间】:2018-03-13 03:32:54
【问题描述】:

我正在尝试用 Python3 编写一个程序,该程序将在 Microsoft SQL 中的表上运行查询并将结果放入 Pandas DataFrame。

我的第一次尝试是下面的代码,但由于某种原因,我不明白这些列没有按照我在查询中运行它们的顺序出现,它们出现的顺序以及它们作为结果改变,填满了我的程序的其余部分:

 import pandas as pd, pyodbc    

    result_port_mapl = []

    # Use pyodbc to connect to SQL Database
    con_string = 'DRIVER={SQL Server};SERVER='+ <server> +';DATABASE=' + 
<database>


     cnxn = pyodbc.connect(con_string)
    cursor = cnxn.cursor()

    # Run SQL Query
    cursor.execute("""
                   SELECT <field1>, <field2>, <field3>
                   FROM result
                   """)

    # Put data into a list
    for row in cursor.fetchall():
        temp_list = [row[2], row[1], row[0]]
        result_port_mapl.append(temp_list)

    # Make list of results into dataframe with column names
    ## FOR SOME REASON HERE row[1] AND row[0] DO NOT CONSISTENTLY APPEAR IN THE 
    ## SAME ORDER AND SO THEY ARE MISLABELLED
    result_port_map = pd.DataFrame(result_port_mapl, columns={'<field1>', '<field2>', '<field3>'})

我也试过下面的代码

    import pandas as pd, pyodbc

    # Use pyodbc to connect to SQL Database
    con_string = 'DRIVER={SQL Server};SERVER='+ <server> +';DATABASE=' + <database>
    cnxn = pyodbc.connect(con_string)
    cursor = cnxn.cursor()

    # Run SQL Query
    cursor.execute("""
                   SELECT <field1>, <field2>, <field3>
                   FROM result
                   """)

    # Put data into DataFrame
    # This becomes one column with a list in it with the three columns 
    # divided by a comma
    result_port_map = pd.DataFrame(cursor.fetchall())

    # Get column headers
    # This gives the error "AttributeError: 'pyodbc.Cursor' object has no 
    # attribute 'keys'"
    result_port_map.columns = cursor.keys()

如果有人能提出这些错误发生的原因或提供更有效的方法,将不胜感激。

谢谢

【问题讨论】:

    标签: python-3.x pandas pyodbc


    【解决方案1】:

    如果你只使用 read_sql?喜欢:

    import pandas as pd, pyodbc    
    con_string = 'DRIVER={SQL Server};SERVER='+ <server> +';DATABASE=' + <database>
    cnxn = pyodbc.connect(con_string)
    query = """
      SELECT <field1>, <field2>, <field3>
      FROM result
    """
    result_port_map = pd.read_sql(query, cnxn)
    result_port_map.columns.tolist()
    

    【讨论】:

    • 谢谢,效果很好,在 read_sql() 之前从未见过该函数
    • 你能解释一下con_string吗?我只知道如何使用 connection = pyodbc.connect('DSN=B1P HANA;UID=***;PWD=***')。而且不知道怎么用你的方式。谢谢
    • 您可以在此处获取 SQL-ODBC-connection-string 的标准元素:github.com/mkleehammer/pyodbc/wiki/…。对于您的 odbc 连接,请检查 Windows(单击 Windows 按钮)“数据源 (ODBC)”。您可以在那里找到相应的数据源详细信息,例如数据源名称 (DSN)、服务器名称。
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 2015-03-02
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2019-11-14
    相关资源
    最近更新 更多