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
_
私が理解していることから、read_sql_query()
は、とにかく最初のステートメントからの結果のみを返します。その場合、それはSET NOCOUNT ON;
であり、ご覧のとおり、None
を返します。これが、コードが失敗した理由です。 IMO SQLステートメントを最適化して、プロセスで複数のテーブルではなく1つのテーブルを返すようにする必要があります(私が想定している#finalからのみ読み取りたいため)。
データフレームに複数のSQLクエリが本当に必要な場合は、次のスレッドで説明されているように、lists
とsplit
を使用できます。