【问题标题】:Python create dataframe from sql query resultPython从sql查询结果创建数据框
【发布时间】:2020-05-03 01:11:14
【问题描述】:

我有多个临时表创建和一个最终选择语句的 sql 查询。

让我们想象一下查询示例:

select 
        t1.Variable11,
        t1.Variable12,
        t2.Variable13
    into #R1
    from t1
    join t2
    on t1.Key1= t2.key1 and t1.Key2= t2.key2
    where t1.Variable1 > 100

select 
        t3.Variable21,
        t3.Variable22,
        t4.Variable23
    into #R2
    from t3
    join t4
    on t3.Key1= t4.key1 and t3.Key2= t4.key2
    where t3.Variable1 > 200


select 
        #R1.*,
        #R2.*
    from #R1
    join #R2
    on #R1.Variable11= #R2.Variable21

我使用 pyodbc 连接器连接到 sql server:

connection = pyodbc.connect(driver='{SQL Server Native Client 11.0}', server=server_name,
                            database=db_name, trusted_connection='yes', MARS_Connection='yes')

我不想重写代码。 我只想编写将返回熊猫数据框的函数。 当我尝试使用pandas.read_sql() 函数时,我收到错误:

TypeError: 'NoneType' 对象不可迭代

当我尝试使用pyodbs.execute() 时收到错误:

没有结果。以前的 SQL 不是查询。

如何处理创建多个临时表和一个最终选择语句的 sql 脚本?

【问题讨论】:

  • 您的最终选择使用R1R2,而您正在选择#R1#R2
  • R1R2使用临时表
  • 是的,我应该在示例中写#R1 和#R2。但这不是这里的问题。我在实际例子中没有这个问题。
  • SET NOCOUNT ON; 放在脚本块的开头,看看是否有帮助。

标签: python sql pandas dataframe pyodbc


【解决方案1】:
import pandas as pd
from sqlalchemy import *
engine = create_engine('mssql+pyodbc://python:python@Database/Tablename?driver=SQL+Server+Native+Client+11.0')
connection = engine.connect()
SQL='select * from ' + Tablename
Tfrom_sql=pd.read_sql(SQL, connection)
connection.close()

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多