我正在尝试在服务器上部署我的第一个Web项目。运行migrate和makemigrations时出现此错误:
ProgrammingError (1146, "Table '<user>$<dbname>.<table_name>'' doesn't exist")
它到处说它应该运行manage.py syncdb
但是这已经过时了,同样在运行manage.py --run-syncdb
时也会出现相同的错误。
模型
class Book(models.Model):
name = models.CharField(max_length=350)
author = models.CharField(max_length=350)
category = models.CharField(max_length=200)
def __str__(self):
return self.name
来自设置
的snipppetsDATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<your_username>$<your_database_name>',
'USER': '<your_username>',
'PASSWORD': '<your_mysql_password>',
'HOST': '<your_mysql_hostname>',
}
} #Everything is replaced with the correct credentials
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main_app',
'accounts',
]
服务器上的DB为空。在我的电脑上(当我在本地开发它时)它工作,当它在数据库中不存在时,它为我创建了表。
我正在使用Django 1.11和Mysql 5.6.27。
我尝试了其他答案,但没有帮助我。 您能否建议我该怎样做才能解决这个问题?
答案 0 :(得分:2)
您应该使用迁移机制:https://docs.djangoproject.com/en/1.11/topics/migrations/
./manage.py makemigrations # this creates migrations files
./manage.py migrate # this applies migrations
答案 1 :(得分:0)
您不需要使用syncdb
第一次创建Django项目以便在django中创建预安装的应用程序(例如管理界面)数据库时,您需要使用:
python manage.py migrate
它创建了所有必要的数据库表和关系
但每次您对应用程序进行更改(例如在模型中创建新列)时,您都可以使用:
python manage.py makemigrations [your app name]
结果将如下所示:
(env35) someone@shell:~/bookstore$ python manage.py makemigrations books
Migrations for 'books':
0005_publisher_family.py:
- Add field family to publisher
最后你运行:
python manage.py migrate
将数据库状态与当前模型集同步 迁移。