我是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
出于某种原因,当我点击下面的“示例”链接时
上面写着这个
我试过迁移,但上面写着
^{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
如果数据无关紧要,您可以从这里删除数据库文件:
(我从你的日志中看到了那条路)
那么您应该再次生成
migrate
。希望能有所帮助!在这是您第一次为应用程序创建迁移吗?如果是,则需要指定应用程序名称以进行迁移:
正如错误信息所说, 表
learning_logs_example
中的列entry_id
不存在。 这不正常。 如果架构迁移被正确地创建和应用, 那么这不应该发生。在此外,看看这个:
Apply all migrations
行应该包含应用程序的名称。 现有的名称是标准的Django组件。 应用程序的名称可能是learning_log
或类似名称。 简而言之, 你的应用程序似乎不存在迁移。在要调试它, 首先检查应用程序的
showmigrations
的输出:如果没有错误,请将输出添加到问题中。在
如果出现错误
^{pr2}$CommandError: No migrations present for: ...
, 然后创建迁移:然后再次检查
showmigrations
的输出, 请把结果加到你的问题中。在如果输出如下所示:
这意味着数据库中有一些关于应用迁移的记录, 事实上,Django认为迁移是正确的。 (如果事实上不是,根据你的主要错误)
根据我目前掌握的信息, 您的数据库似乎与模型不同步: 未将模型添加到数据库中, 迁移没有被正确保存。在
一个简单的解决方案是手动添加缺少的列。 您可以通过查看迁移文件找到正确的架构:
从中您应该能够找到丢失的
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项目安装到计算机上的另一个文件夹中。 如果不顺利的话, 那么设置还是不好。在
如果以上任何一项需要进一步澄清,请告诉我。在
相关问题 更多 >
编程相关推荐