Download Documentazione FAQ Aiutaci!!!
Avanti Indietro Indice

1. Introduzione

Questo modulo dovrebbe essere nella maggioranza dei casi compatibile con un'interfaccia più datata, scritta da Joe Skinner e altri. In ogni caso, tale versione dell'interfaccia è a) antipatica da usare con i thread (le operazioni di un thread sul database potrebbero bloccare tutti gli altri thread), b) scritta per MySQL 3.21 (e di suo non compila sulle versioni più recenti), c) non più attivamente mantenuta secondo ogni evidenza. MySQLdb è un modulo completamente nuovo, distribuito come software libero sotto licenza GPL.

1.1 Piattaforme

Linux/UNIX

Questo modulo viene sviluppato su Linux RedHat (attualmente 7.1) per Intel. Lo si dovrebbe poter generare senza troppi problemi su gran parte delle piattaforme usando lo script setup.py . Si suppone funzioni anche per MacOS X. Si faccia attenzione: è necessario avere il package Distutils fornito con Python 2.0. In caso non lo si abbia (per dire, si usa Python 1.5.2), lo si può trovare presso www.python.org[off-site link].

Windows (3.11, 95, 98, NT, 2000, CE, BSOD, XYZ, ecc.)

La piattaforma Windows non è supportata. Comunque pare che lo script setup.py funzioni anche in questo caso. Probabilmente sulla pagina web c'è un link per ottenere un installer Windows precompilato. Si faccia attenzione al fatto che si tratta di un contributo di terzi, l'autore del modulo non può essere d'aiuto nel compilare e far funzionare il modulo sotto Windows.

1.2 Python

MySQLdb richiede Python 1.5.2 o successivo. Le versioni anteriori non funzioneranno, poiché MySQL richiede il supporto per i long long del C. In caso si usino versioni anteriori di Python, si faccia l'upgrade a 1.5.2 o successivo. Lo sviluppo viene attualmente portato avanti su Python 2.1, ma Python 1.5.2 verrà ancora supportato nel prossimo futuro.

1.3 MySQL

MySQL-3.22

Si garantisce il funzionamento solo a partire dalla versione 3.22.32 di MySQL. Potrebbe comunque funzionare anche con versioni più vecchie. Comunque se si usa una vecchia versione di MySQL si dovrebbe considerare seriamente di effettuare l'upgrade, sia per le correzioni ai bachi che per questioni di sicurezza.

MySQL-3.22 sembra avere un problema quando si tenta di inserire valori TIME con i secondi come frazioni. Valori come 12:56:13.00 vengono restituiti come 344:13:00. A quanto pare il valore originale viene interpretato come 12 giorni, 56 ore, 13 minuti, 0 secondi. (12 giorni più 56 ore fanno 344 ore). Per evitare il problema si usi il tipo DateTimeDelta.

MySQL-3.23

MySQL-3.23 ora è stabile (3.23.37 al momento della stesura). MySQLdb supporta le transazioni se il server le supporta, ma anche in questo caso non c'è garanzia assoluta che funzionino. Per cui si devono per forza usare tabelle a prova di transazione (Transaction-Safe Table). Attualmente le TST supportate sono BDB e InnoDB. Le GEMINI sono in programma per MySQL-4.0. Si noti che generalmente MySQL funziona in modo AUTOCOMMIT per default e MySQLdb lo dà per scontato. Per cambiare modo, si usi l'istruzione SQL SET AUTOCOMMIT=0.

1.4 DateTime

Se si ha installato il package mx.DateTime[off-site link] (raccomandato), MySQLdb userà gli oggetti da esso forniti per date e orari. Altrimenti verranno passati a Python come stringhe. È anche possibile modificare il dizionario di conversione di tipo per farli restituire come altre classi di oggetti, se si preferisce così.

1.5 MySQLmodule

MySQLmodule, la vecchia interfaccia MySQL di Joe Skinner e altri, è suddivisa in una porzione C e una Python. La porzione C, MySQL, internamente è simile all'interfaccia perl DBI. In aggiunta c'è una porzione Python, Mysqldb, che fornisce un'interfaccia secondo la specifica API DB versione 1.0, scritta da James Henstridge. MySQLdb-0.2.2 e seguenti includono CompatMysqldb, un adattamento di Mysqldb a _mysql. Dovrebbe essere considerato sperimentale.

Al contrario, la porzione C di MySQLdb, _mysql , è progettata per imitare l'API C di MySQL in stile orientato agli oggetti. Un eventuale passaggio da MySQL a _mysql comporterebbe una certa quantità di lavoro. MySQLdb fornisce un'interfaccia conforme alla API DB v.2.0, che ha apportato alcuni cambiamenti alla versione 1.0. Ecco alcune cose cui prestare particolare attenzione:


Operazione
Mysqldb MySQLdb
Connettersi db = Mysqldb.Mysqldb("db@host usente password") db = MySQLdb.connect(db='db', host='host', user='utente', passwd='password')
Cursore implicito db.execute(SQL) I cursori impliciti sono stati abbandonati da DB API v2.0; si usi sempre c = db.cursor()
Prelevare righe come dizionari c.fetchDict(),le chiavi sono "tabella.colonna"non standard; la classe per cursori alternativi DictCursorfornisce un'interfaccia dizionario, le chiavi sono "colonna" o "tabella.colonna" se ci sono due colonne con lo stesso nome; si usi l'istruzione SQL AS per rinominare i campi.
Transazioni db.commit() e db.rollback() esistono entrambi e non fanno nulla, senza però avvisare di ciò (pericolo!) db.commit() e db.rollback() funzionano se il server MySQL supporta le transazioni, altrimenti db.rollback() fallisce sempre
Cambiamenti da Mysqldb a MySQLdb

1.6 Zope e ZMySQLDA

Ho scritto ZMySQLDA[off-site link] per l'utilizzo con MySQLdb. È un adattamento di ZOracleDA di Digital Creations, i creatori di Zope.

1.7 Documentazione

La documentazione sulla pagina web potrebbe essere leggermente più aggiornata rispetto alla release attuale e potrebbe riportare funzionalità presenti solo nella release futura.

1.8 FAQ

Una FAQ è disponibile presso http://dustman.net/andy/python/MySQLdb/faq/MySQLdb-FAQ.html[off-site link].


Avanti Indietro Indice