Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

flask-sqlalchemy use of drop_all and create_all for specific tables

In sqlalchemy (0.8.2), drop_all() and create_all() both have a tables parameter, which can be a list of Table objects to drop or add.

In flask-sqlalchemy (1.0) these methods do not have this parameter.

What is the appropriate way to drop / create a subset of database tables, using flask-alchemy?

like image 410
Lou K Avatar asked Oct 07 '13 18:10

Lou K


1 Answers

Flask-SQLAlchemy's create_all() method will use the Base's metadata to create the table, by calling SQLAlchemy's MetaData.create_all() method. This method allows for a list of table objects to specify. You will also need to provide it a "bind", which is basically the engine. You can retrieve that using the engine property of Flask-SQLAlchemy.

So, you should be able to do...

db = SQLAlchemy(app)

class MyTable(db.Model):
    ...

class MyOtherTable(db.Model):
    ...

db.metadata.create_all(db.engine, tables=[
    MyTable.__table__,
    ...
])

This assumes that you are using a single database. Otherwise you would need to do a create_all() call for each database using get_engine().

like image 145
Mark Hildreth Avatar answered Nov 11 '22 17:11

Mark Hildreth