|
Avanti
Indietro
Indice
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.
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 .
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.
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.
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 .
Se si ha installato il package
mx.DateTime (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ì.
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 DictCursor fornisce 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
|
Ho scritto
ZMySQLDA
per l'utilizzo con MySQLdb. È un adattamento di ZOracleDA di Digital
Creations, i creatori di Zope.
La documentazione sulla pagina web potrebbe essere leggermente più
aggiornata rispetto alla release attuale e potrebbe riportare funzionalità
presenti solo nella release futura.
Una FAQ è disponibile presso
http://dustman.net/andy/python/MySQLdb/faq/MySQLdb-FAQ.html .
Avanti
Indietro
Indice
| |