Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQLdb z wieloma transakcjami na połączenie

Myślę, że istnieje nieporozumienie dotyczące tego, co stanowi tutaj transakcję.

Twój przykład otwiera jedno połączenie, a następnie wykonuje jedno transakcja na nim. W tej transakcji wykonujesz wiele instrukcji SQL, ale po zatwierdzeniu zamykasz ją całkowicie. Oczywiście to więcej niż w porządku.

Wykonywanie wielu transakcji (w przeciwieństwie do instrukcji SQL) wygląda tak:

conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")

for j in range(10):
    try:
        for i in range(10):
            cur = conn.cursor()
            query = "DELETE FROM SomeTable WHERE ID = %d" % i
            cur.execute(query)
            cur.close()
        conn.commit()
    except Exception:
        conn.rollback()

conn.close()

Powyższy kod zatwierdza 10 transakcji, z których każda składa się z 10 indywidualnych instrukcji usuwania.

I tak, powinieneś móc bez problemu ponownie użyć otwartego połączenia, o ile nie dzielisz tego połączenia między wątkami.

Na przykład SQLAlchemy ponownie wykorzystuje połączenia, łącząc je, udostępniając otwarte połączenia w razie potrzeby do aplikacji. Nowe transakcje i nowe wyciągi są wykonywane na tych połączeniach przez cały okres istnienia aplikacji, bez konieczności ich zamykania do momentu zamknięcia aplikacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:SELECT z innego serwera

  2. Połącz tabele wartościami przecinków

  3. Najlepsze praktyki dotyczące przechowywania hasła do bazy danych

  4. Jak uzyskać wyniki z nodejs za pomocą pakietu mysql?

  5. Jak uzyskać dane z ostatniego tygodnia w MySQL?