2016-12-06 10 views
0

大きなSQLテーブルからchunkwiseを読み込むには、python(バージョン3.4.4)、pandas(バージョン0.19.1)、sqlalchemy(バージョン1.1.4)を使用していますこれらのチャンクを前処理して別のSQLテーブルに書き込むことができます。 pdはパンダのインポートでpd.read_sql_query(verses_sql, conn, chunksize=10)で読み取る連続chunkwise、verses_sqlは私がしなければ正常に動作し、SQLクエリとconnは、DB-API接続である:ここではpandasとsqlalchemyをchunkwiseで読み書きする方法

import pandas as pd 
from sqlalchemy import create_engine 

engine = create_engine('mssql+pymssql://<username>:<password>@<database>:1433/<FirstTable>') 
conn = engine.connect() 

verses_sql = '''SELECT [KA_Lang] FROM [dbo].[<FirstTable>]''' 

for chunk in pd.read_sql_query(verses_sql, conn, chunksize=10): 
    chunk['KA_Lang'] = chunk['KA_Lang'].str.replace(r'[^a-zA-Z\u00C0-\u02AF]'," ") 
    chunk['KA_Lang'] = chunk['KA_Lang'].str.replace(r'\s\s+', " ") 
    chunk['KA_Lang'] = chunk['KA_Lang'].str.lower() 
    print(chunk['KA_Lang'].head(1)) 

は問題です:私がしようとした場合前処理したチャンクchunk['KA_Lang']を2番目のSQLテーブルに書き込みます。これをSecondTableとしましょう。の最初のチャンク(10要素)だけが渡されます。反復はそこで停止する。

import pandas as pd 
from sqlalchemy import create_engine 
from sqlalchemy import Table, Column, Integer, String, MetaData 

engine = create_engine('mssql+pymssql://<username>:<password>@<database>:1433/<FirstTable>') 
conn = engine.connect() 

verses_sql = '''SELECT [KA_Lang] FROM [dbo].[<FirstTable>]''' 

for chunk in pd.read_sql_query(verses_sql, conn, chunksize=10): 
    chunk['KA_Lang'] = chunk['KA_Lang'].str.replace(r'[^a-zA-Z\u00C0-\u02AF]'," ") 
    chunk['KA_Lang'] = chunk['KA_Lang'].str.replace(r'\s\s+', " ") 
    chunk['KA_Lang'] = chunk['KA_Lang'].str.lower() 
    print(chunk['KA_Lang'].head(1)) 

    chunk.to_sql('<SecondTable>', conn, if_exists= 'append', index= False) 

conn.close() 

1つのチャンクを1つのSQLテーブルから連続して読み込み、別のSQLテーブルに書き込むにはどうすればよいですか?次のものを含めると、すべてのチャンクによる繰り返しが停止するのはなぜですか。chunk.to_sql('<SecondTable>', conn, if_exists= 'append', index= False)

答えて

1

さまざまな回避策を試して数日後、私はこの問題を解決しました。それはかなり簡単です。連続的に1つのSQLテーブルから1つのチャンクを読み込み、異なるSQLテーブルに二つの異なる接続を、それを記述するために定義する必要があります

engine = create_engine('mssql+pymssql://<username>:<password>@<database>:1433/<FirstTable>') 
engine1 = create_engine('mssql+pymssql://<username>:<password>@<database>:1433/<FirstTable>') 
conn = engine.connect() 
conn1 = engine1.connect() 

chunkが第二テーブルに書き込まれているコードの行は、適応する必要があります〜:

chunk.to_sql('<SecondTable>', conn1, if_exists= 'append', index= False) 

完了!

関連する問題