Creare una tabella in MySQL con Python
Impara a creare tabelle MySQL in Python con mysql-connector-python. Tratta CREATE TABLE, tipi di dati, vincoli, IF NOT EXISTS e SHOW TABLES.
Creare una tabella è il primo passo per archiviare dati strutturati in MySQL. Questo capitolo mostra come definire e creare una tabella MySQL da Python usando mysql-connector-python, trattando i tipi di dati delle colonne, i vincoli comuni, la clausola di protezione IF NOT EXISTS, come elencare le tabelle esistenti e come gestire gli errori in modo pulito.
Prerequisiti
Prima di eseguire uno qualsiasi degli esempi seguenti, assicurati di avere:
- Python 3.x installato
- Un server MySQL in esecuzione
mysql-connector-pythoninstallato:
pip install mysql-connector-python- Un database con cui lavorare (consulta MySQL Create Database se devi crearne uno)
Connessione a MySQL
Ogni operazione inizia con una connessione. Passa le tue credenziali e il nome del database di destinazione a mysql.connector.connect():
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()L'oggetto cursor() è ciò che si usa per inviare istruzioni SQL al server.
Creazione di una tabella
Usa l'istruzione SQL CREATE TABLE all'interno di cursor.execute() per definire una nuova tabella. L'esempio seguente crea una tabella customers con quattro colonne:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Table created successfully.")
mycursor.close()
mydb.close()Tipi di colonna e vincoli usati sopra
| Colonna | Tipo | Note |
|---|---|---|
id | INT | AUTO_INCREMENT genera un ID univoco per ogni riga; PRIMARY KEY impone l'unicità e velocizza le ricerche |
name | VARCHAR(255) | Stringa a lunghezza variabile fino a 255 caratteri; NOT NULL significa che ogni riga deve fornire un valore |
address | VARCHAR(255) | Facoltativo — nessun NOT NULL, quindi accetta NULL |
age | INT | Memorizza numeri interi |
Utilizzo di IF NOT EXISTS
Eseguire CREATE TABLE su una tabella che esiste già genera un errore. Aggiungi IF NOT EXISTS per rendere l'istruzione un'operazione nulla quando la tabella è già presente:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Done — table created or already exists.")
mycursor.close()
mydb.close()Questo schema è sicuro da chiamare ad ogni avvio dell'applicazione senza causare errori di tabella duplicata.
Elenco delle tabelle per verificare la creazione
Dopo aver creato una tabella, puoi confermare che esiste eseguendo SHOW TABLES:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("SHOW TABLES")
tables = [row[0] for row in mycursor.fetchall()]
print("Tables in database:", tables)
if "customers" in tables:
print("customers table is ready.")
else:
print("customers table was not found.")
mycursor.close()
mydb.close()Output di esempio:
Tables in database: ['customers']
customers table is ready.Gestione degli errori
Racchiudere il codice di creazione della tabella in un blocco try/except permette di intercettare i problemi — come una connessione persa o un errore di sintassi nel SQL — senza mandare in crash il programma:
import mysql.connector
from mysql.connector import Error
try:
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Table created successfully.")
except Error as e:
print(f"Error: {e}")
finally:
if mydb.is_connected():
mycursor.close()
mydb.close()
print("Connection closed.")Il blocco finally garantisce che la connessione venga sempre chiusa, anche se si verifica un'eccezione.
Tipi di dati delle colonne più comuni
MySQL supporta molti tipi di dati. Questi sono quelli che userai più spesso nelle applicazioni Python:
| Tipo di dati | Caso d'uso |
|---|---|
INT | Numeri interi (ID, conteggi, età) |
FLOAT, DOUBLE | Numeri decimali (prezzi, misurazioni) |
VARCHAR(n) | Testo a lunghezza variabile fino a n caratteri |
TEXT | Stringhe lunghe senza massimo fisso |
DATE | Date del calendario (YYYY-MM-DD) |
DATETIME | Data e ora combinate (YYYY-MM-DD HH:MM:SS) |
BOOLEAN | TRUE / FALSE (memorizzato come TINYINT(1)) |
Un esempio più completo
Ecco una tabella più realistica che utilizza insieme diversi tipi di dati e vincoli:
import mysql.connector
from mysql.connector import Error
try:
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
product VARCHAR(255) NOT NULL,
quantity INT NOT NULL DEFAULT 1,
price FLOAT NOT NULL,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP
)
"""
mycursor.execute(sql)
print("orders table created (or already exists).")
except Error as e:
print(f"Error: {e}")
finally:
if mydb.is_connected():
mycursor.close()
mydb.close()DEFAULT 1 significa che quantity viene impostata a 1 quando non viene fornito alcun valore. DEFAULT CURRENT_TIMESTAMP registra automaticamente quando ogni riga dell'ordine viene inserita.
Conclusione
Per creare una tabella in MySQL da Python:
- Installa
mysql-connector-pythone connettiti al tuo database. - Scrivi un'istruzione
CREATE TABLEche definisca il nome, il tipo di dati e gli eventuali vincoli di ogni colonna. - Usa
IF NOT EXISTSper evitare errori su esecuzioni ripetute. - Chiama
SHOW TABLES(o interrogainformation_schema.tables) per confermare che la tabella sia stata creata. - Chiudi sempre il cursore e la connessione — idealmente in un blocco
finally.
Una volta che la tua tabella esiste, puoi iniziare a inserire righe (vedi MySQL Insert) e a interrogarle (vedi MySQL Select).