python删除mysql表无效_python – SqlAlchemy Mysql:由于IntegrityError而无法删除表

当我尝试重新初始化我的数据库时,我不断收到IntegrityError:

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

在我的init_db脚本中,我有:

def main(argv=sys.argv):

if len(argv) != 2:

usage(argv)

config_uri = argv[1]

setup_logging(config_uri)

settings = get_appsettings(config_uri)

engine = create_engine('...')

Session.configure(bind=engine)

session = Session()

Base.metadata.bind=engine

Base.metadata.drop_all(engine)

Base.metadata.create_all(engine)

它会让我删除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

解决方法:

我看到两个可能的原因:

>未映射表:数据库中有另一个表具有到users表的ForeignKey,但是没有映射到任何sqlalchemy模型,因此在drop_all操作期间不会被删除.

>缺少ForeignKey映射:sqlalchemy模型中缺少某些关系.例如,DB上的地址表有一个指向users表的ForeignKey,但是你的模型地址(或正确地说,地址的映射器)不配置这个ForeignKey,因此在drop_all期间sqlalchemy没办法知道应该在引用的表(用户)之前删除此表.

标签:python,mysql,sqlalchemy,pyramid

来源: https://codeday.me/bug/20190826/1728127.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值