django 迁移 与 精准迁移 与 二次迁移 migrations 以及错误处理
首先数据库迁移的两大命令:
python manage.py makemigrations & python manage.py migrate
前者是将model层转为迁移文件migration,后者将新版本的迁移文件执行,更新数据库。
这两中命令调用默认为全局,即对所有最新更改的model或迁移文件进行操作。如果想对部分app进行操作,就要在其后追加app name:
$ python manage.py makemigrations app_name
$ python manage.py migrate app_name
如果想要精确到某个迁移文件(0004_xxx.py):
$ python manage.py migrate app_name 0004
如果想看迁移文件的执行状态,可以用showmigrations命令查看:
$ python manage.py showmigrations
admin
[X] 0001_initial
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
#评论 关联OrderGoods 反查所有评论 orders = sku_data.ordergoods_set.all()
关联时提示没有 ordergoods_set 报错
之前迁移数据库时 不知怎么地 orders模块的没有迁移 数据库没有 df_order_info 与 df_order_goods 表
然后又重新执行了
python manage.py makemigrations
python manage.py migrate
Operations to perform: Apply all migrations: admin, auth, contenttypes, goods, orders, sessions, users Running migrations: Applying goods.0001_initial...Traceback (most recent call last): File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/backends/utils.py", line 63, in execute return self.cursor.execute(sql) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 101, in execute return self.cursor.execute(query, args) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/cursors.py", line 170, in execute result = self._query(query) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query conn.query(q) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/connections.py", line 732, in _read_query_result result.read() File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/connections.py", line 1075, in read first_packet = self.connection._read_packet() File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/connections.py", line 684, in _read_packet packet.check_error() File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.InternalError: (1050, "Table 'df_goods' already exists") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "../../manage.py", line 22, in <module> execute_from_command_line(sys.argv) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line utility.execute() File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv self.execute(*args, **cmd_options) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute output = self.handle(*args, **options) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle fake_initial=fake_initial, File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/migrations/executor.py", line 115, in migrate state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration state = migration.apply(state, schema_editor) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/migrations/migration.py", line 129, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/migrations/operations/models.py", line 97, in database_forwards schema_editor.create_model(model) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 302, in create_model self.execute(sql, params or None) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 119, in execute cursor.execute(sql, params) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/backends/utils.py", line 80, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute return self.cursor.execute(sql, params) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise raise value.with_traceback(tb) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/backends/utils.py", line 63, in execute return self.cursor.execute(sql) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 101, in execute return self.cursor.execute(query, args) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/cursors.py", line 170, in execute result = self._query(query) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query conn.query(q) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/connections.py", line 732, in _read_query_result result.read() File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/connections.py", line 1075, in read first_packet = self.connection._read_packet() File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/connections.py", line 684, in _read_packet packet.check_error() File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "/home/czpubuntu/.virtualenvs/django_py3/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) django.db.utils.InternalError: (1050, "Table 'df_goods' already exists")
报错 网上搜了 一些方法:
查看迁移内容
python manage.py showmigrations
执行
python manage.py migrate --fake
再次查看 成这样了
python manage.py showmigrations
能正常使用 之前没有出现这样的问题
没有完全采用 留一个参考:https://blog.csdn.net/weixin_44575037/article/details/109078101
在后来又出现了这个问题
找了许久 提示意思是
表 df_order_goods 里没有 sku_id 字段
django.db.utils.InternalError: (1054, "Unknown column 'df_order_goods.sku_id' in 'field list'")
之前 迁移数据库 好像有这个字段 可能是由于上面迁移的BUG 导致的
解决办法:
手动添加
alter table df_order_goods add sku_id int not null;
有好的方法还请留言...............................
如果在有问题在解决吧!