2015-10-04 21 views
5

Używam SQLAlchemy do połączenia, aby wypisać pandas DataFrame do bazy danych MySQL. Wcześnie w moim kodu utworzyć silnik sqlalchemy:Czy istnieje sposób na przetestowanie połączenia SQLAlchemy?

engine = create_my_sqlalchemy_connection() 

mogę wykonać kilka zapytań, zrobić kilka obliczeń, a następnie spróbuj użyć tego samego silnika do zapisu w bazie danych trochę później:

df.to_sql('my_table', engine, if_exists='append', index=False) 

Czasami to działa, a czasami połączenie zostaje utracone do czasu, gdy kod jest gotowy do zapisu do bazy danych i wystąpił błąd.

mogłem zrobić spróbować, z wyjątkiem i utworzyć nowe połączenie w razie potrzeby:

try: 
    df.to_sql('my_table', engine, if_exists='append', index=False) 
except: 
    engine = create_my_sqlalchemy_connection() 
    df.to_sql('my_table', engine, if_exists='append', index=False) 

Jednak myślałem, że dotrzeć i sprawdzić, czy ktoś zna lepszy sposób (na przykład, jeśli istnieją pewne Metoda SQLAlchemy, której nie znam do testowania, aby sprawdzić, czy połączenie nadal istnieje).

+1

Czy masz pojęcie, co znaczy "trochę później"? Sekundy, minuty, godziny? Nigdy nie miałem problemów z działaniem kodu przez kilka minut, ale myślę, że może być inaczej w przypadku dłuższych interwencji –

+0

, jeśli df jest bardzo duży, możesz zapętlić się nad df_chunks i wywołać na nich to_sql()? – s5s

Odpowiedz

0

Warto wypróbować właściwość Connection.closed.

if engine.closed: 
    engine = create_my_sqlalchemy_connection() 
    df.to_sql('my_table', engine, if_exists='append', index=False) 
else: 
    df.to_sql('my_table', engine, if_exists='append', index=False) 
Powiązane problemy