2017-10-18 3 views
0

Voici ma requêteComment automatiser Split de requête SQL en utilisant Python

df = pd.read_sql('SELECT id, timestamp, location_id FROM orders', con=db_connection) 

Je veux partager ce

df1 = pd.read_sql('SELECT id, timestamp, location_id FROM orders where id<=1000000', con=db_connection) 
... 
df100 = pd.read_sql('SELECT id, timestamp, location_id FROM orders where id>99000000 and id<=100000000', con=db_connection) 

Je ne veux pas coder en dur parce qu'il est sujette à des erreurs, comment, selon pour faire ça?

Répondre

1

vous pouvez utiliser chunksize parameter:

sql_reader = pd.read_sql('SELECT id, timestamp, location_id FROM orders', 
         con=db_connection, chunksize=1000000) 

dfs = [df for df in sql_reader] 

dfs - est une liste de dataframe de, donc:

  • dfs[0] - premier DF (premier 1000000 lignes)
  • dfs[1] - deuxième DF (1000000 prochaines lignes)
  • et ainsi de suite ...

si vous avez besoin d'une table complète - pd.concat(dfs, ignore_index=True) va vous retourner un dataframe, qui contient toutes lignes de la table orders

REMARQUE: vous pourriez obtenir MemoryError exception si elle ne correspond pas à la mémoire

+0

donc si je veux appeler un morceau, j'appelle juste 'df1',' df2', etc –

+0

@NabihIbrahimBawazir, non vous accédez DF dans 'dfs' comme une liste Python régulière -' dfs [0] '- premier DF,' dfs [1] '- deuxième DF, ..., etc. – MaxU

+0

donc si j'appelle' dfs' c'est une table complète? –