繁体   English   中英

Flask-SQLAlchemy截断/删除表记录并绕过/忽略IntegrityError

[英]Flask-SQLAlchemy truncate/delete table records and bypassing/ignoring IntegrityError

我发现这个关于删除单个表的记录的好帖子 但是,我试图清除所有表以进行测试,因此出于测试目的,我遇到了一些烦人的IntegrityError

无论如何,如何绕过这个?

IntegrityError: (psycopg2.IntegrityError) update or delete on table
"table_1" violates foreign key constraint "fk_table_2_primary_table_1"
on table "table_2"

注意:我不会删除表,只会删除记录。

使用PosgreSQL清空数据库,我使用了以下代码:

def delete_tables_and_indexes(engine):
    """ Delete all tableis and indexes """
    if engine.name == 'postgresql':
        # Drop tables
        sql_raw_query = 'select \'drop table if exists "\' || tablename || \'" cascade;\' from pg_tables where schemaname=\'public\';'
        for result in engine.execute(sql_raw_query):
            engine.execute(result[0])
        # Drop types
        sql_raw_query = 'select \'drop type if exists "\' || t.typname || \'";\' '\
            'FROM pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace '\
            'WHERE (t.typrelid = 0 OR (SELECT c.relkind = \'c\' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) '\
            'AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) '\
            'AND n.nspname NOT IN (\'pg_catalog\', \'information_schema\');'
        for result in engine.execute(sql_raw_query):
            engine.execute(result[0])

这使用一些原始的SQL查询,以使postgresql理解它的方式删除事物,从而取消所有架构依赖关系的链接。

使用SQLite不能以“硬”方式处理那些依赖之王,您可以轻松地使用:

metadata.drop_all(engine)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM