Je suis actuellement en cours sur un cours de conception Web. Ce que je veux faire, c'est vérifier si une table nommée portafolio existe dans ma base de données, sinon je veux en créer une. J'utilise Python (flask) et sqlite3 pour gérer ma base de données. Jusqu'à présent, j'ai une partie de la logique en SQL pour créer une table si elle n'existe pas:

# db is my database variable
db.execute('''create table if not exists portafolio(id INTEGER PRIMARY KEY AUTOINCREMENT, 
                                              stock TEXT, 
                                              shares INTEGER, 
                                              price FLOAT(2), 
                                              date TEXT
                                             ''');

Mais au lieu d'utiliser des commandes SQL, j'aimerais savoir comment pourrais-je faire exactement la même vérification en Python, car cela aurait l'air beaucoup plus propre.

Toute aide serait appréciée.

2
tadm123 17 janv. 2017 à 05:01

2 réponses

Meilleure réponse

Vous ne savez pas quelle manière est la plus propre, mais vous pouvez émettre une simple sélection et gérer l'exception:

try:
    cursor.execute("SELECT 1 FROM portafolio LIMIT 1;")
    exists = True
except sqlite3.OperationalError as e:
    message = e.args[0]
    if message.startswith("no such table"):
        print("Table 'portafolio' does not exist")
        exists = False
    else:
        raise

Notez qu'ici, nous devons vérifier de quel type de OperationalError il s'agit et, nous devons avoir cette sous-chaîne de message "pas jolie" dans une chaîne de vérification car il n'existe actuellement aucun moyen d'obtenir le code d'erreur réel.

Ou, une approche plus spécifique à SQLite:

table_name = "portafolio"
cursor.execute("""
    SELECT name 
    FROM sqlite_master 
    WHERE type='table' AND name=?;
""", (table_name, ))

exists = bool(cursor.fetchone())
4
Community 23 mai 2017 à 12:00

Si vous recherchez un travail soigné avec les opérations de base de données, je vous conseille d'en savoir plus sur ORM (Object Relation Model).

J'utilise Flask avec SQLAlchemy. Vous pouvez utiliser des classes python pour gérer les opérations SQL comme ceci:

class Portafolio(db.Model):
   id = db.Column(db.Integer, primary_key=True)
   stock = db.Column(db.String(255), unique=True)
   shares = db.Column(db.Integer, unique=True)

Il effectue facilement toutes les vérifications et la migration de la base de données.

1
mrKindo 17 janv. 2017 à 02:16