J'ai écrit un module qui consiste à créer un fichier de base de données vide
def create_database():
engine = create_engine("sqlite:///myexample.db", echo=True)
metadata = MetaData(engine)
metadata.create_all()
Mais dans une autre fonction, je veux ouvrir myexample.db
base de données, et créez-y des tables si elle n'a pas déjà cette table.
EG du premier tableau suivant que je créerais serait:
Table(Variable_TableName, metadata,
Column('Id', Integer, primary_key=True, nullable=False),
Column('Date', Date),
Column('Volume', Float))
(Comme il s'agit initialement d'une base de données vide, elle ne contiendra aucune table, mais par la suite, je pourrai y ajouter d'autres tables. C'est ce que j'essaie de dire.)
Aucune suggestion?
J'ai réussi à comprendre ce que j'avais l'intention de faire. J'ai utilisé engine.dialect.has_table(engine, Variable_tableName)
pour vérifier si la base de données contient la table. SI ce n'est pas le cas, alors il procédera à la création d'une table dans la base de données.
Exemple de code:
engine = create_engine("sqlite:///myexample.db") # Access the DB Engine
if not engine.dialect.has_table(engine, Variable_tableName): # If table don't exist, Create.
metadata = MetaData(engine)
# Create a table with the appropriate Columns
Table(Variable_tableName, metadata,
Column('Id', Integer, primary_key=True, nullable=False),
Column('Date', Date), Column('Country', String),
Column('Brand', String), Column('Price', Float),
# Implement the creation
metadata.create_all()
Cela semble me donner ce que je cherche.
Notez que dans 'Base.metadata' documentation il indique à propos de create_all:
Conditionnel par défaut, ne tentera pas de recréer les tables déjà présentes dans la base de données cible.
Et si vous pouvez voir que create_all prend ces arguments: create_all (self, bind = None, tables = None, checkfirst = True), et selon la documentation:
La valeur par défaut est True, n'émettez pas de CREATE pour les tables déjà présentes dans la base de données cible.
Donc, si je comprends bien votre question, vous pouvez simplement ignorer la condition.