MySQL Crea Database
Scopri come creare un database MySQL in Python con mysql-connector-python: connessione, creazione, elenco e selezione di database con esempi pratici.
Questo capitolo spiega come creare un database MySQL da Python utilizzando la libreria mysql-connector-python. Imparerai come connetterti a un server MySQL, eseguire l'istruzione CREATE DATABASE, elencare i database disponibili e selezionare un database per le query successive.
Se non hai ancora installato il connettore, consulta prima MySQL Get Started. Una volta che il database esiste, il passo successivo è creare le tabelle.
Installazione del connettore MySQL
Installa il driver MySQL ufficiale per Python con pip:
pip install mysql-connector-pythonQuesto pacchetto funziona con Python 3.6 e versioni successive e non richiede un'estensione C separata.
Connessione al server MySQL
Prima di creare un database devi aprire una connessione al server MySQL. Fornisci l'indirizzo host, un account utente e la password di quell'account. Nota che non specifichi un database in questa fase — il database non esiste ancora.
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
print(mydb) # <mysql.connector.connection.MySQLConnection object at 0x...>
mydb.close()Se i dettagli di connessione sono errati, mysql.connector.connect() genera mysql.connector.errors.InterfaceError. Nel codice in produzione, racchiudi la chiamata in un blocco try/except.
Creazione di un database
Una volta connesso, ottieni un cursore ed esegui l'istruzione SQL CREATE DATABASE. Il cursore è l'oggetto attraverso il quale vengono inviati tutti i comandi SQL.
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")
mycursor.close()
mydb.close()Se mydatabase esiste già, il server genera un errore. Aggiungi IF NOT EXISTS per rendere l'istruzione idempotente — ha successo sia che il database sia nuovo che già presente:
mycursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")Regole di denominazione dei database
- I nomi possono contenere lettere, cifre e caratteri di sottolineatura (
_). - I nomi non distinguono tra maiuscole e minuscole su Windows e sono case-sensitive sulla maggior parte delle configurazioni Linux.
- La lunghezza massima è di 64 caratteri.
- Evita le parole riservate come
database,tableoselectcome nomi di database; se devi usarle, racchiudi il nome tra backtick in SQL.
Impostazione del set di caratteri
Per impostazione predefinita MySQL usa il set di caratteri predefinito del server (di solito utf8mb4 nelle installazioni moderne). Puoi specificare esplicitamente il set di caratteri e la collation per garantire un comportamento coerente su diversi server:
mycursor.execute(
"CREATE DATABASE IF NOT EXISTS mydatabase "
"CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
)utf8mb4 memorizza l'intera gamma Unicode (incluse le emoji). utf8mb4_unicode_ci è una collation case-insensitive e accent-insensitive adatta alla maggior parte delle applicazioni web.
Elenco dei database esistenti
Dopo aver creato il database puoi verificare che esista eseguendo SHOW DATABASES, che restituisce una riga per ogni database:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")
for (db_name,) in mycursor:
print(db_name)
mycursor.close()
mydb.close()Ogni riga restituita da SHOW DATABASES è una tupla con un solo elemento, quindi il disimballaggio (db_name,) estrae direttamente la stringa. Un output tipico è simile a:
information_schema
mydatabase
mysql
performance_schema
sysPer verificare solo se esiste il tuo database specifico puoi filtrare in Python:
mycursor.execute("SHOW DATABASES")
databases = [row[0] for row in mycursor]
if "mydatabase" in databases:
print("Database found.")
else:
print("Database not found.")Selezione di un database
Una volta che un database esiste, passa il suo nome come argomento database quando apri la connessione — questo è il pattern normale per tutto il lavoro successivo:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase" # select the database here
)
mycursor = mydb.cursor()
# All queries now run against mydatabase
mycursor.close()
mydb.close()Puoi anche cambiare il database attivo su una connessione esistente senza chiuderla:
mycursor.execute("USE mydatabase")Questo è utile quando devi spostarti tra più database nello stesso script, ma passare database= a connect() è più chiaro per la maggior parte dei casi d'uso.
Gestione degli errori
Gestisci sempre i potenziali errori del database in modo che l'applicazione fallisca in modo controllato invece di andare in crash con un'eccezione non gestita:
import mysql.connector
from mysql.connector import Error
mydb = None
try:
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
print("Database created (or already exists).")
except Error as e:
print(f"Error: {e}")
finally:
if mydb is not None and mydb.is_connected():
mycursor.close()
mydb.close()Il blocco finally garantisce che la connessione venga chiusa anche quando viene generata un'eccezione, prevenendo perdite di connessione.
Esempio completo funzionante
Lo snippet qui sotto combina tutti i passaggi: crea il database, verifica che compaia in SHOW DATABASES, quindi si riconnette con il database selezionato:
import mysql.connector
from mysql.connector import Error
DB_NAME = "mydatabase"
def create_database():
try:
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = conn.cursor()
# Create the database if it does not exist
cursor.execute(
f"CREATE DATABASE IF NOT EXISTS {DB_NAME} "
"CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
)
print(f"Database '{DB_NAME}' created (or already exists).")
# Confirm it appears in the database list
cursor.execute("SHOW DATABASES")
databases = [row[0] for row in cursor]
if DB_NAME in databases:
print(f"Confirmed: '{DB_NAME}' is listed on the server.")
cursor.close()
conn.close()
# Re-connect with the database selected
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database=DB_NAME
)
print(f"Connected to '{DB_NAME}' successfully.")
conn.close()
except Error as e:
print(f"Error: {e}")
create_database()Output atteso quando viene eseguito su un server MySQL nuovo:
Database 'mydatabase' created (or already exists).
Confirmed: 'mydatabase' is listed on the server.
Connected to 'mydatabase' successfully.Passi successivi
- MySQL Create Table — definisci le tabelle all'interno del database appena creato.
- MySQL Insert — inserisci righe nelle tue tabelle.
- MySQL Select — interroga i dati con
SELECT.