大きな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)
?