/admin/learning_logs/example处的操作错误/

2024-05-19 12:37:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我是django以及模块和web应用程序的初学者。在

以下是回溯和数据:

OperationalError at /admin/learning_logs/example/
no such column: learning_logs_example.entry_id
Request Method: GET
Request URL:    http://localhost:8000/admin/learning_logs/example/
Django Version: 1.11.7
Exception Type: OperationalError
Exception Value:    
no such column: learning_logs_example.entry_id
Exception Location: C:\Users\Bryan\Desktop\LEARNI~1\ll_env\lib\site-
packages\django\db\backends\sqlite3\base.py in execute, line 328
Python Executable:  C:\Users\Bryan\Desktop\LEARNI~1\ll_env\Scripts\python.exe
Python Version: 3.6.2
Python Path:    
['C:\\Users\\Bryan\\Desktop\\learning log',
 'C:\\Users\\Bryan\\Desktop\\LEARNI~1\\ll_env\\Scripts\\python36.zip',
 'C:\\Users\\Bryan\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs',
 'C:\\Users\\Bryan\\AppData\\Local\\Programs\\Python\\Python36-32\\lib',
 'C:\\Users\\Bryan\\AppData\\Local\\Programs\\Python\\Python36-32',
 'C:\\Users\\Bryan\\Desktop\\LEARNI~1\\ll_env',
 'C:\\Users\\Bryan\\Desktop\\LEARNI~1\\ll_env\\lib\\site-packages']
Server time:    Sat, 18 Nov 2017 18:36:14 +0000

出于某种原因,当我点击下面的“示例”链接时

enter image description here

上面写着这个

enter image description here

我试过迁移,但上面写着

^{pr2}$

我是怎么做到的?

首先我添加了example条目/表单和TextField,然后添加了一个“example”。我添加了一个ForeignKey对象,参数为Entry。在

我回去编辑我的“示例”,但是异常出现了。在

编辑: 当我运行python manage.py showmigrations learning_logs时,janos想要输出结果,所以这里是:

admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
auth
 [X] 001_initial
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
learning_logs
 [X] 0001_initial
sessions
 [X] 0001_initial

我希望这能帮上忙。在

我重新创建了异常页右here


Tags: envadminexamplelibexceptionbryanusersinitial
3条回答

如果数据无关紧要,您可以从这里删除数据库文件:

C:\Users\bryan_8nva8ki\Desktop\learning logs\db.sqlite3

(我从你的日志中看到了那条路)

那么您应该再次生成migrate。希望能有所帮助!在

这是您第一次为应用程序创建迁移吗?如果是,则需要指定应用程序名称以进行迁移:

python manage.py makemigrations my-app

正如错误信息所说, 表learning_logs_example中的列entry_id不存在。 这不正常。 如果架构迁移被正确地创建和应用, 那么这不应该发生。在

此外,看看这个:

(venv) C:\...\learning log>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.

Apply all migrations行应该包含应用程序的名称。 现有的名称是标准的Django组件。 应用程序的名称可能是learning_log或类似名称。 简而言之, 你的应用程序似乎不存在迁移。在

要调试它, 首先检查应用程序的showmigrations的输出:

./manage.py showmigrations learning_log

如果没有错误,请将输出添加到问题中。在

如果出现错误CommandError: No migrations present for: ..., 然后创建迁移:

^{pr2}$

然后再次检查showmigrations的输出, 请把结果加到你的问题中。在

如果输出如下所示:

learning_log
 [X] 0001_initial
 ...

这意味着数据库中有一些关于应用迁移的记录, 事实上,Django认为迁移是正确的。 (如果事实上不是,根据你的主要错误)

根据我目前掌握的信息, 您的数据库似乎与模型不同步: 未将模型添加到数据库中, 迁移没有被正确保存。在

一个简单的解决方案是手动添加缺少的列。 您可以通过查看迁移文件找到正确的架构:

./manage.py sqlmigrate learning_log 0001

从中您应该能够找到丢失的entry_id字段是如何声明的, 然后使用查询ALTER TABLE learning_logs_example ADD COLUMN entry_id ...手动将其添加到表中, 其中其余参数取决于sqlmigrate输出中列的定义。在

如果问题只是缺少一个或几个字段, 那么这个变通方法就足以让某些东西发挥作用了。 (如果没有,则跳到下一节。) 但你不应该就此止步, 因为模型可能也需要一些索引。 您可以进一步研究sqlmigrate的输出,并重新创建依赖{}的所有其他对象, 比如索引,触发器。 但是一个更干净的解决方案是重新创建应用程序的所有表, 遵循以下步骤:

  • 转储当前数据:./manage.py dumpdata learning_log > learning_log.json
  • 删除应用程序的所有表
  • 重新创建应用程序的表:./manage.py migrate fake learning_log zero; ./manage.py migrate learning_log
  • 还原数据:./manage.py loaddata learning_log

如果手动添加列的解决方法不起作用 (你会遇到更复杂的问题), 然后你有两个选择:

  • 如果您无法承受丢失数据的代价,那么您将不得不手动跟踪并解决每一个问题。完成后,您应该转储并恢复应用程序的表,正如我在上一节中所解释的那样

  • 如果可以丢失数据,则可以按照上一节中的过程操作,而不必执行转储和恢复步骤。也就是说,删除并重新创建应用程序的表


最后, 为了避免进一步的问题, 您需要确保所有迁移都与模型同步, 和被正确添加到版本控制中。 一个很好的测试方法是将Django项目安装到计算机上的另一个文件夹中。 如果不顺利的话, 那么设置还是不好。在


如果以上任何一项需要进一步澄清,请告诉我。在

相关问题 更多 >