SqlAlchemy+Mysql:由于IntegrityE,无法删除表

2024-04-24 21:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图重新初始化我的数据库时,我总是得到一个IntegrityError:

sqlalchemy.exc.IntegrityError: (IntegrityError) (1217, 'Cannot delete or update a parent row: a foreign key constraint fails') '\nDROP TABLE users' ()

在init_db脚本中,我有:

^{pr2}$

它可以让我删除Users表,它是:

class User(Base):
    __tablename__='users'
    __table_args__={
        'mysql_engine':'InnoDB',
        'mysql_charset':'utf8',
    }

    user_id = Column(Integer, primary_key=True, unique=True)
    username = Column(VARCHAR(16), primary_key=True, unique=True)
    name = Column(VARCHAR(16))
    password = Column(VARCHAR(20))
    email = Column(VARCHAR(30))
    creation = Column(DateTime, default = datetime.datetime.now)    

    def __init__(self, un, name, pw, email):
        self.username = un
        self.name = name
        self.email = email
        self.password = pw

Tags: keynameselftrueinitemailmysqlusername
1条回答
网友
1楼 · 发布于 2024-04-24 21:28:45

我认为有两个可能的原因:

  1. 未映射表:数据库中有另一个表,该表与users表有一个ForeignKey,但它没有映射到任何{}模型,因此在drop_all操作期间不会被删除。在
  2. 缺少ForeignKey映射:模型中缺少某些关系。例如,DB上的addresses表有一个指向users表的ForeignKey,但是您的模型Address(或者正确地说,是Address的映射器)没有配置这个外键,因此在drop_allsqlalchemy期间,无法知道该表应该在被引用的表之前删除(users)。在

相关问题 更多 >