sql >> Databáze >  >> RDS >> Mysql

MySQLdb s více transakcemi na připojení

Domnívám se, že zde došlo k nedorozumění ohledně toho, co představuje transakci.

Váš příklad otevře jedno připojení a poté provede jedno transakce na něm. V této transakci provedete více příkazů SQL, ale po potvrzení ji úplně zavřete. To je samozřejmě více než v pořádku.

Provádění více transakcí (na rozdíl od pouze příkazů SQL), vypadá takto:

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()

Výše uvedený kód provede 10 transakcí, z nichž každá sestává z 10 jednotlivých příkazů k odstranění.

A ano, měli byste být schopni bez problémů znovu použít otevřené připojení, pokud toto připojení nesdílíte mezi vlákny.

Například SQLAlchemy znovu používá připojení tím, že je sdružuje a předává otevřená připojení podle potřeby aplikaci. Nové transakce a nové příkazy jsou na těchto připojeních prováděny po celou dobu životnosti aplikace, aniž by bylo nutné je zavírat, dokud není aplikace ukončena.



  1. Proč není v QT5.2 načten ovladač QMYSQL?

  2. Výběr všech položek v jedné tabulce a spojení s jinou tabulkou, což umožňuje hodnoty null

  3. ODP.NET Managed - Nelze najít požadovaného poskytovatele dat .Net Framework

  4. Je v Oracle možné VLOŽIT nebo AKTUALIZOVAT záznam prostřednictvím pohledu?