2017-07-22 1 views
2

Pour créer le tableau User, je dois utiliser les méthodes drop_all puis create_all. Mais ces deux fonctions ré-initialisent une base de données entière. Je me demande s'il existe un moyen de créer la table User sans effacer (ou supprimer) les tables existantes dans une base de données?Comment créer une table unique à l'aide de SqlAlchemy declarative_base

import sqlalchemy 
from sqlalchemy.ext.declarative import declarative_base 
Base = declarative_base() 


class User(Base): 
    __tablename__ = 'users' 
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True) 
    name = sqlalchemy.Column(sqlalchemy.String) 

    def __init__(self, code=None, *args, **kwargs): 
     self.name = name 


url = 'postgresql+psycopg2://user:[email protected]/my_db' 
engine = sqlalchemy.create_engine(url) 
session = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker()) 
session.configure(bind=engine, autoflush=False, expire_on_commit=False) 

Base.metadata.drop_all(engine) 
Base.metadata.create_all(engine) 
+4

Pourquoi avez-vous "devez" exécuter '' drop_all' avant create_all'? S'il n'y a pas d'autres problèmes, 'create_all' devrait être bon. Et vous pouvez généralement vous intéresser à l'alambic et aux migrations. –

+0

['MetaData.drop_all()' (http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData.drop_all) supprime toutes les tables stockées dans les métadonnées, pas toutes dans DB. –

Répondre