django 遷移 與 精準遷移 與 二次遷移 migrations 以及錯誤處理
阿新 • • 發佈:2020-10-28
首先資料庫遷移的兩大命令:
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):
如果想看遷移檔案的執行狀態,可以用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 報錯
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;
有好的方法還請留言...............................
如果在有問題在解決吧!