W3docs

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-python installato:
pip install mysql-connector-python

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

ColonnaTipoNote
idINTAUTO_INCREMENT genera un ID univoco per ogni riga; PRIMARY KEY impone l'unicità e velocizza le ricerche
nameVARCHAR(255)Stringa a lunghezza variabile fino a 255 caratteri; NOT NULL significa che ogni riga deve fornire un valore
addressVARCHAR(255)Facoltativo — nessun NOT NULL, quindi accetta NULL
ageINTMemorizza 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 datiCaso d'uso
INTNumeri interi (ID, conteggi, età)
FLOAT, DOUBLENumeri decimali (prezzi, misurazioni)
VARCHAR(n)Testo a lunghezza variabile fino a n caratteri
TEXTStringhe lunghe senza massimo fisso
DATEDate del calendario (YYYY-MM-DD)
DATETIMEData e ora combinate (YYYY-MM-DD HH:MM:SS)
BOOLEANTRUE / 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:

  1. Installa mysql-connector-python e connettiti al tuo database.
  2. Scrivi un'istruzione CREATE TABLE che definisca il nome, il tipo di dati e gli eventuali vincoli di ogni colonna.
  3. Usa IF NOT EXISTS per evitare errori su esecuzioni ripetute.
  4. Chiama SHOW TABLES (o interroga information_schema.tables) per confermare che la tabella sia stata creata.
  5. 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).

Was this page helpful?