【问题标题】:Database connection - Django is auto renaming or something! CONFUSION数据库连接 - Django 是自动重命名什么的!混乱
【发布时间】:2012-05-03 01:02:41
【问题描述】:

制作博客、数据库等。事情是,我有一个名为“posts”的数据库。

'default': {
    'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'posts',                      # Or path to database file if using sqlite3.
    'USER': '*******',                      # Not used with sqlite3.
    'PASSWORD': '*******',                  # Not used with sqlite3.
    'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '****',                      # Set to empty string for default. Not used with sqlite3.
}

models.py

from django.db import models


class posts(models.Model):
    author = models.CharField(max_length = 30)
    title = models.CharField(max_length = 100)
    bodytext = models.TextField()
    timestamp = models.DateTimeField()

views.py

from django.shortcuts import render_to_response
from models import posts 



#from settings import default
def index(request):
    entries = posts.objects.all()[:10]
    return render_to_response('homepage/index.html', {'posts' : entries}

输出

OperationalError at /
(1049, "Unknown database 'posts.homepage_posts'")
Request Method: GET
Request URL:    http://127.0.0.1:8000/
Django Version: 1.4
Exception Type: OperationalError
Exception Value:    
(1049, "Unknown database 'posts.homepage_posts'")
Exception Location: /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/connections.py in __init__, line 187
Python Executable:  /usr/bin/python
Python Version: 2.7.1
Python Path:    
['/Users/thor/Sites/FirstBlog',
 '/Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC',
 '/Library/Python/2.7/site-packages']
Server time:    Wed, 2 May 2012 19:56:53 -0500

它会自动为数据库名称添加.homepage_posts 后缀,使其无法访问。请帮忙?

【问题讨论】:

  • 你做过./manage.py syncdb,成功了吗?要尝试的另一件事是直接查看表格(./manage.py dbshell 然后SHOW TABLES)看看发生了什么。
  • 我认为问题不在于它正在访问posts.homepage_posts——这是一种有效的 database.table_name 格式。 MySQL 只是告诉您其中的帖子部分无效,因为数据库不存在。所以,是的,确保你已经运行了./manage.py syncdb

标签: python mysql database django


【解决方案1】:

django 自动生成表的默认命名约定是在表名前加上 <app_label>_
您显然在名为“主页”的应用程序中拥有此模式/视图。这是有效的,不是你的问题。 django 这样做是为了在不同应用程序之间命名您的各种表,并防止在混合 3rd 方应用程序时发生名称冲突。

这个错误告诉你整个数据库不存在。这几乎 100% 意味着您没有告诉 django 从您的模型结构中填充您的数据库:

python manage.py syncdb

现在运行它,每次添加新应用或创建新模型时也是如此。它将生成您的数据库和表格。

如果您真的关心,您还可以通过为模型设置元“db_table”字段来控制数据库表的实际名称:https://docs.djangoproject.com/en/dev/ref/models/options/#db-table

class posts(models.Model):
    class Meta:
        db_table = 'foo_bar'

...但同样,这完全是一个单独的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2013-05-23
    • 1970-01-01
    • 2016-01-16
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多