Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将DB引擎更改为MySQL。现在Django不创建表_Python_Mysql_Django_Migration_Django Database - Fatal编程技术网

Python 将DB引擎更改为MySQL。现在Django不创建表

Python 将DB引擎更改为MySQL。现在Django不创建表,python,mysql,django,migration,django-database,Python,Mysql,Django,Migration,Django Database,我有一个Django应用程序,带有标准的SQLite3DB。现在我想使用MySQL。所以我在settings.py中更改了数据库,它运行得很好,但我无法运行服务器,因为它显示 django.db.utils.InternalError: (1049, "Unknown database 'django'") 所以我在客户端创建了这个数据库,现在它说 django.db.utils.ProgrammingError: (1146, "Table 'django.Cat' doesn't exis

我有一个Django应用程序,带有标准的SQLite3DB。现在我想使用MySQL。所以我在settings.py中更改了数据库,它运行得很好,但我无法运行服务器,因为它显示

django.db.utils.InternalError: (1049, "Unknown database 'django'")
所以我在客户端创建了这个数据库,现在它说

django.db.utils.ProgrammingError: (1146, "Table 'django.Cat' doesn't exist")
似乎我必须自己创建所有表,这是我能做的最糟糕的变体

#settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/db.conf',
        },
    }
}

如何让Django创建我所有的表

我甚至不能用任何命令运行python3 manage.py,因为它给出了这个异常

回溯:

Traceback (most recent call last):
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 74, in execute
    return self.cursor.execute(query, args)
  File "/path/to/project/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 209, in execute
    res = self._query(query)
  File "/path/to/project/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 315, in _query
    db.query(q)
  File "/path/to/project/venv/lib/python3.6/site-packages/MySQLdb/connections.py", line 239, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.ProgrammingError: (1146, "Table 'django.Cat' doesn't exist")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/path/to/project/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 377, in execute
    django.setup()
  File "/path/to/project/venv/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/apps/registry.py", line 122, in populate
    app_config.ready()
  File "/path/to/project/External/apps.py", line 13, in ready
    active_cats = list(Cat.objects.filter(active_cat=True).all())
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/models/query.py", line 276, in __iter__
    self._fetch_all()
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/models/query.py", line 1261, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/models/query.py", line 57, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1151, in execute_sql
    cursor.execute(sql, params)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 100, in execute
    return super().execute(sql, params)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/path/to/project/venv/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 74, in execute
    return self.cursor.execute(query, args)
  File "/path/to/project/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 209, in execute
    res = self._query(query)
  File "/path/to/project/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 315, in _query
    db.query(q)
  File "/path/to/project/venv/lib/python3.6/site-packages/MySQLdb/connections.py", line 239, in query
    _mysql.connection.query(self, query)
django.db.utils.ProgrammingError: (1146, "Table 'django.Cat' doesn't exist")
你的问题在这里:

File "/path/to/project/External/apps.py", line 13, in ready
    active_cats = list(Cat.objects.filter(active_cat=True).all())
此代码作为初始化过程的一部分执行。这就是阻止您执行任何管理命令的原因。请注意:

警告

尽管您可以如上所述访问模型类,但请避免 在ready实现中与数据库交互。这 包括执行查询、保存、删除和管理的模型方法 方法等,还可以通过django.db.connection进行原始SQL查询。你的 ready方法将在每个管理命令启动期间运行。 例如,即使测试数据库配置是独立的 在生产设置中,manage.py测试仍将执行一些 查询您的生产数据库


您是否在MySQL实例中创建了数据库django?它不存在,除非你创造它。看@BillKarwin,是的,我看了。正如我在问题中所说,我创建了它,然后得到了django.db.utils.ProgrammingError:1146,表'django.Cat'不存在。我真的必须创建所有表吗?您必须在相应的数据库引擎中创建数据库。Django不行that@ArakkalAbu,请阅读我写的评论:您不需要创建表,但数据库是正确的,但有两个问题:1。为什么它与sqlite一起工作?2.在服务器开始运行之前,我需要对db进行一些更改,那么,我该怎么做才能解决您发现的问题呢1/因为您在运行迁移后添加了此代码创建表提示:定期检查是否可以在新的空数据库上运行所有迁移是一件好事。2/服务器启动并不意味着什么-在生产中,Django应用程序通常作为多个并发进程运行,由前端服务器wsgi桥接器apache Modu wsgi、gunicorn或其他任何东西处理。事实上,如果不知道你想在这里做什么以及为什么要小心,就不可能回答这个问题。我以前在Flask应用程序中也做过类似的事情。我的应用程序运行一些其他脚本,它们可以长到一天,所以如果服务器因某种原因崩溃,我需要在下次服务器启动时将它们标记为失败。这个变体在Flask中还可以,但在Flask中似乎不起作用。那么,您可能需要使用异步任务队列—您的其他脚本不应该依赖于wsgi服务器进程的生命周期。但是再一次,如果在一个新问题中没有一个明确的问题陈述=>就不可能提供任何严肃的帮助。事实上,ir在Flask上工作正常——事实上,我想说,到目前为止似乎工作正常——相当多的事情似乎工作正常,直到你的应用程序投入生产并具有一些真实的流量和负载,但这并不意味着它是最好的解决方案。
File "/path/to/project/External/apps.py", line 13, in ready
    active_cats = list(Cat.objects.filter(active_cat=True).all())