【问题标题】:cannot accessing a simple database in django无法访问 django 中的简单数据库
【发布时间】:2016-09-28 00:35:10
【问题描述】:

我浏览了 django doc polls 示例。现在我有一个可用的数据库name.info.db。我把它和manage.py放在同一个目录下,也是db.sqlite3所在的目录。 我把settings.py改成

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'name.info.db'),
}}

我的 models.py 是

class PItable(models.Model):
    pid_text = models.CharField(max_length=200)
    lname_text = models.CharField(max_length=200, null=True)
    fname_text = models.CharField(max_length=200, null=True)
    affs_text = models.CharField(max_length=2000, null=True)
    pmidlist_text = models.CharField(max_length=2000, null=True)
    clustering_text = models.CharField(max_length=2000, null=True)
    def __str__(self):
        return self.fname_text

我从视图和模型中删除了问题和选择(来自民意调查示例)。 我做了

python manage.py makemigrations pidb
python manage.py migrate

我收到以下消息,但未显示我的数据库,但仍显示已删除的模型(问题、选择)。我在这里做错了什么?当我从 python shell PItable.objects.filter(id=1) 访问时,它显示为空 []。感谢您的帮助!

$ python manage.py sqlmigrate pidb 0001

BEGIN;
--
-- Create model Choice
--
CREATE TABLE "pidb_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL);
--
-- Create model Question
--
CREATE TABLE "pidb_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);
--
-- Add field question to choice
--
ALTER TABLE "pidb_choice" RENAME TO "pidb_choice__old";
CREATE TABLE "pidb_choice" ("id" integer NOT NULL PRIMARY KEY  AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL REFERENCES "pidb_question" ("id"));
INSERT INTO "pidb_choice" ("id", "choice_text", "question_id", "votes") SELECT "id", "choice_text", NULL, "votes" FROM "pidb_choice__old";
DROP TABLE "pidb_choice__old";
CREATE INDEX "pidb_choice_7aa0f6ee" ON "pidb_choice" ("question_id");

COMMIT;

【问题讨论】:

  • 你到底在问什么?您是删除了表格中的条目还是删除了表格??
  • 据我所知,您已经创建了数据库表,但它们是空的——您还没有插入任何数据。您希望数据库记录神奇地出现吗?
  • 数据库 name.info.db 已经由其他人使用 python 代码创建。我只是用它。我可以从 python 代码访问数据。现在我需要在 django 中重做整个项目。

标签: python django database


【解决方案1】:

了解managed option。如果您将其设置为False,则不会对该模型执行任何数据库建表或删除操作。如果模型表示现有表或已通过其他方式创建的数据库视图,这将非常有用。

class PItable(models.Model):
    pid_text = models.CharField(max_length=200)
    lname_text = models.CharField(max_length=200, null=True)
    fname_text = models.CharField(max_length=200, null=True)
    affs_text = models.CharField(max_length=2000, null=True)
    pmidlist_text = models.CharField(max_length=2000, null=True)
    clustering_text = models.CharField(max_length=2000, null=True)

    class Meta(object):
        managed = False

    def __str__(self):
        return self.fname_text

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2012-04-12
    • 2020-02-12
    相关资源
    最近更新 更多