我发现这很酷,post与删除单个表的记录有关。但是,我试图清除所有表以进行测试,因此为了测试起见,我遇到了一些烦人的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"
注意:我不会删除表,只会删除记录。
答案 0 :(得分:0)
使用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)