tortoise / aerich

A database migrations tool for TortoiseORM, ready to production.
https://github.com/tortoise/aerich
Apache License 2.0
808 stars 91 forks source link

aerich upgrade - Failed to open the referenced table #224

Closed zy7y closed 2 years ago

zy7y commented 2 years ago

my models

class ContentCategory(BaseModel):
    """广告分类"""
    name = fields.CharField(max_length=50, description="名称")
    key = fields.CharField(max_length=50, description="类别键名")

    class Meta:
        table = "m_content_category"

class Content(BaseModel):
    """广告内容"""
    category = fields.ForeignKeyField("models.ContentCategory", on_delete=fields.CASCADE)
    title = fields.CharField(max_length=100, description="标题")
    url = fields.CharField(max_length=300, description="内容链接")
    image = fields.CharField(max_length=256, description="图片链接", null=True)
    text = fields.TextField(description="内容")
    sequence = fields.IntField(description="排序")
    status = fields.BooleanField(default=True, description="是否展示")

    class Meta:
        table = "m_content"

An error occurred during the aerich upgrade

PS E:\Users\777\Desktop\shop> aerich migrate --name goods_tables_add
Success migrate 12_20220108114739_goods_tables_add.sql
PS E:\Users\777\Desktop\shop> aerich upgrade
E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\cursors.py:239: Warning: Table 'tb_brand' already exists
  await self._query(query)
E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\cursors.py:239: Warning: Table 'tb_category_visit' already exists
  await self._query(query)
E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\cursors.py:239: Warning: Table 'tb_channel_group' already exists
  await self._query(query)
Traceback (most recent call last):
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\tortoise\backends\mysql\client.py", line 44, in translate_exceptions_
    return await func(self, *args)
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\tortoise\backends\mysql\client.py", line 214, in execute_script
    await cursor.execute(query)
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\cursors.py", line 239, in execute
    await self._query(query)
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\cursors.py", line 457, in _query
    await conn.query(q)
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\connection.py", line 428, in query
    await self._read_query_result(unbuffered=unbuffered)
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\connection.py", line 620, in _read_query_result
    await result.read()
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\connection.py", line 1103, in read
    first_packet = await self.connection._read_packet()
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\aiomysql\connection.py", line 591, in _read_packet
    packet.check_error()
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\pymysql\protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.InternalError: (1824, "Failed to open the referenced table 'tb_spu'")

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\python396\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\python396\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "E:\Users\777\Desktop\shop\venv\Scripts\aerich.exe\__main__.py", line 7, in <module>
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\aerich\cli.py", line 257, in main
    cli()
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\click\core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\click\core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\click\core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "E:\Users\777\Desktop\shop\venv\lib\site-packages\click\core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
zy7y commented 2 years ago

或是因为生成的sql文件中顺序未按照模型类定义顺序生成,导致需要外键的表没有在被其他表关联关系前建立 image