Ich benutze Python (Version 3.4.4), Pandas (Version 0.19.1) und Sqlalchemy (Version 1.1.4), um chunkwise aus einer großen SQL-Tabelle zu lesen , verarbeiten Sie diese Chunks vor und schreiben Sie sie in eine andere SQL-Tabelle. Die kontinuierliche BROCKENWEISE mit pd.read_sql_query(verses_sql, conn, chunksize=10)
lesen, wo pd
Pandas Import ist, ist verses_sql
die SQL-Abfrage und conn
ist die DB-API-Verbindung, funktioniert gut, wenn ich tun:Wie chunkwise lesen und schreiben mit pandas und sqlalchemy
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))
Hier ist das Problem: Wenn ich versuche, schreibe die vorverarbeiteten Chunks chunk['KA_Lang']
in eine zweite SQL-Tabelle, nennen wir es SecondTable
, nur der erste Chunk von 10 Elementen wird übergeben. Die Iteration stoppt dort. Hier ist der angepasste Code:
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()
Wie kann ich kontinuierlich einen Brocken aus einer SQL-Tabelle lesen und schreiben Sie es auf eine andere SQL-Tabelle? Warum stoppt die Iteration durch alle Chunks, wenn ich Folgendes einschließe: chunk.to_sql('<SecondTable>', conn, if_exists= 'append', index= False)
?