-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
from sqlalchemy.engine.reflection import Inspector from sqlalchemy.schema import DropConstraint, DropTable, MetaData, Table from extensions import db # from dotmap import DotMap def try_add(object): """ Try to add the column 'object' to its table in the database and return it. """ try: db.session.add(object) db.session.commit() return object except Exception: db.session.rollback() raise def drop_all_cascade(): """(On a live db) drops all foreign key constraints before dropping all tables. Workaround for SQLAlchemy not doing DROP ## CASCADE for drop_all() (https://github.com/pallets/flask-sqlalchemy/issues/722) """ con = db.engine.connect() trans = con.begin() inspector = Inspector.from_engine(db.engine) # We need to re-create a minimal metadata with only the required things to # successfully emit drop constraints and tables commands for postgres # (based on the actual schema of the running instance) meta = MetaData() tables = [] all_fkeys = [] for table_name in inspector.get_table_names(): fkeys = [] for fkey in inspector.get_foreign_keys(table_name): if not fkey["name"]: continue fkeys.append(db.ForeignKeyConstraint((), (), name=fkey["name"])) tables.append(Table(table_name, meta, *fkeys)) all_fkeys.extend(fkeys) for fkey in all_fkeys: con.execute(DropConstraint(fkey)) for table in tables: con.execute(DropTable(table)) trans.commit()