web-dev-qa-db-ja.com

Python Pandas read_sql_query「 'NoneType'オブジェクトは反復可能ではありません」エラー

SQLを実行し、結果をPandaDataframeに保存しようとしています。これが私のコードです。

_        dbserver = 'validserver'
        filename = 'myquery.sql'
        database  ='validdb'       
        conn = pyodbc.connect(r'Driver={SQL Server};Server=' + dbserver + 
            ';Database=' + database + ';Trusted_Connection=yes;')
        fd = open(filename, 'r')
        resultingData = pd.read_sql_query(fd.read(),conn)
        fd.close()
        conn.close()
_

pd.read_sql_query(fd.read(),conn)は引き続きエラー「NoneType」オブジェクトは反復できません」エラー

Myquery.sqlをSQLサーバーウィンドウで実行して結果を得ることができます。私は_SET NOCOUNT ON;_を持っています

ここで何が欠けているのか、これをデバッグするにはどうすればよいですか? myquery.sqlには、#tempテーブルと結合がほとんどありません。結果には約75,000行が含まれます。皆さんありがとう。

更新:

正確なクエリを投稿することはできませんが、これはクエリがどのように見えるかです。

_SET NOCOUNT ON;

SELECT SourceID, PeriodEndDate = MAX(PeriodEndDate)
INTO #SourceDate 
FROM table1
WHERE PERIODENDDATE <= 20171229
GROUP BY SourceID

SELECT RS.*, R.TypeCode INTO #final
FROM table2 RS
INNER JOIN #SourceDate SD ON SD.id = RS.id
INNER JOIN table3 R ON R.id = RS.id

select * from #final
_
6
ProgSky

私が理解していることから、read_sql_query()は、とにかく最初のステートメントからの結果のみを返します。その場合、それはSET NOCOUNT ON;であり、ご覧のとおり、Noneを返します。これが、コードが失敗した理由です。 IMO SQLステートメントを最適化して、プロセスで複数のテーブルではなく1つのテーブルを返すようにする必要があります(私が想定している#finalからのみ読み取りたいため)。

データフレームに複数のSQLクエリが本当に必要な場合は、次のスレッドで説明されているように、listssplitを使用できます。

複数のselectを使用したPandas read_sqlクエリ

1
r.ook