Questo può essere un po 'hacky e tecnicamente non crea una tabella temporanea, si comporta come una sola, ma è possibile creare l'uso di @contextmanager
decorator from contextlib
per creare la tabella all'apertura del contesto e rilasciarla alla chiusura. Potrebbe sembrare qualcosa di simile:
from contextlib import contextmanager
import numpy as np
import sqlalchemy as sqla
import pandas as pd
@contextmanager
def temp_table(frame, tbl, eng, *args, **kwargs):
frame.to_sql(tbl, eng, *args, **kwargs)
yield
eng.execute('DROP TABLE {}'.format(tbl))
df = pd.DataFrame(np.random.randint(21, size=(10, 10)))
cnx = sqla.create_engine(conn_string)
with temp_table(df, 'some_table_name', cnx, if_exists='replace', flavor='mysql', index=False):
# do stuff with "some_table_name"
L'ho provato usando Teradata e funziona perfettamente. Non ho un MySQL in giro su cui posso provarlo, ma finché le istruzioni DROP
funzionano in MySQL, dovrebbe funzionare come previsto.
fonte
2017-10-20 17:45:22
La funzione '_create_table_setup' è chiamata solo in' __init__' per impostare la proprietà 'table'. Per creare una tabella con 'pandas.io.sql.SQLTable', si chiama' create', che chiama '_execute_create', che sovrascrive la proprietà' table'. Ecco perché il tuo tentativo non ha funzionato. Invece, devi modificare '_execute_create': https://gist.github.com/alecxe/44682f79b18f0c82a99c#gistcomment-2359365 –