Flask-SQLAlchemy检查数据库中是否存在表

时间:2016-11-17 10:51:16

标签: python database flask sqlalchemy

Flask-SQLAlchemy检查数据库中是否存在表。 我看到类似的问题,但我尽量不成功。

Flask-SQLAlchemy check if row exists in table

我创建了一个表对象,如下所示:

<class'flask_sqlalchemy.XXX'>,

现在如何检查对象是否存在于数据库中。

我做了很多尝试: 例如:

   for t in db.metadata.sorted_tables:
            print("tablename",t.name)

之前创建了一些表对象,但它在数据库中并不存在,现在它们已经存在。所有印刷品。 例如:打印内容

tablename: table_1
tablename: table_2
tablename: table_3

但只有table_1存在数据,table_2和table_3是dynamica创建的,现在我只想使用table_1。

非常感谢。

1 个答案:

答案 0 :(得分:1)

我使用了这些方法。像你一样看模型只会告诉你数据库应该是什么。

import sqlalchemy as sa

def database_is_empty():
    table_names = sa.inspect(engine).get_table_names()
    is_empty = table_names == []
    print('Db is empty: {}'.format(is_empty))
    return is_empty

def table_exists(name):
    ret = engine.dialect.has_table(engine, name)
    print('Table "{}" exists: {}'.format(name, ret))
    return ret

可能有一种比这更简单的方法:

def model_exists(model_class):
    engine = db.get_engine(bind=model_class.__bind_key__)
    return model_class.metadata.tables[model_class.__tablename__].exists(engine)