[英]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.