首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OperationalError :/admin/learning_log/示例/

OperationalError :/admin/learning_log/示例/
EN

Stack Overflow用户
提问于 2017-11-18 18:52:23
回答 3查看 1.2K关注 0票数 1

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

以下是跟踪和数据:

代码语言:javascript
运行
复制
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

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

上面写着

我试过迁移,但上面写着

代码语言:javascript
运行
复制
(venv) C:\...\learning log>python manage.py makemigrations
No changes detected

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

我是怎么做到的?

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

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

编辑: Well janos希望在运行python manage.py showmigrations learning_logs时获得输出,如下所示:

代码语言:javascript
运行
复制
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

我希望这能帮上忙。

我重新创建了异常页(右这里 )

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-10 13:30:17

正如错误消息所述,表entry_id中的列learning_logs_example不存在。这不正常。如果正确创建并正确应用了模式迁移,则不应发生这种情况。

此外,考虑到这一点:

C:\学习log>python manage.py迁移操作来执行:应用所有迁移: admin、auth、contenttype、运行迁移的会话:没有要应用的迁移。

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

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

代码语言:javascript
运行
复制
./manage.py showmigrations learning_log

如果您没有得到错误,那么请将输出添加到您的问题中。

如果您得到一个错误CommandError: No migrations present for: ...,那么创建迁移:

代码语言:javascript
运行
复制
./manage.py makemigrations learning_log

然后再次检查showmigrations的输出,并将输出添加到您的问题中。

如果输出如下所示:

代码语言:javascript
运行
复制
learning_log
 [X] 0001_initial
 ...

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

根据我到目前为止所获得的信息,您的数据库似乎与模型不同步:一些字段在没有应用到数据库的情况下被添加到模型中,并且迁移没有被正确保存。

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

代码语言:javascript
运行
复制
./manage.py sqlmigrate learning_log 0001

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

如果问题仅仅是一个或几个缺失的字段,那么这个解决方案可能就足以让一些东西正常工作。(如果不是,请跳到下一节。)不过,您不应该就此止步,因为模型也可能需要一些索引。您可以进一步研究sqlmigrate的输出,并重新创建所有依赖于learning_logs_example的其他对象,如索引、触发器。但是,一个更干净的解决方案是重新创建应用程序的所有表,如下所示:

  • 转储当前数据:./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项目安装在计算机上的另一个文件夹中。如果这不顺利,那么设置仍然不太好。

如果需要更多的澄清,请告诉我。

票数 3
EN

Stack Overflow用户

发布于 2017-11-18 20:48:35

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

代码语言:javascript
运行
复制
python manage.py makemigrations my-app
票数 1
EN

Stack Overflow用户

发布于 2017-12-13 12:12:42

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

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

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

那你应该再做一次migrate。希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47369811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档