标签: django-database

auto_now_add 和 timezone.now 默认值之间的差异

auto_now_addDjango 中模型的和timezone.now(作为默认值)有什么区别?例子:

create_date = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

create_date = models.DateTimeField(default=timezone.now)
Run Code Online (Sandbox Code Playgroud)

UPD。我说的是我总是不覆盖默认值的情况。

python django django-models django-database

10
推荐指数
2
解决办法
3117
查看次数

Django表与百万行

我有一个包含2个应用程序(书籍和阅读器)的项目.

Books应用程序有一个包含4百万行的表,其中包含以下字段:

 book_title = models.CharField(max_length=40)
 book_description = models.CharField(max_length=400)
Run Code Online (Sandbox Code Playgroud)

为了避免用4百万行查询数据库,我想按主题划分它(20个模型,20个表,200,000行(book_horror,book_drammatic,ecc).

在"阅读器"应用程序中,我想插入这些字段:

reader_name = models.CharField(max_length=20, blank=True)
book_subject = models.IntegerField()
book_id = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

因此,我想使用整数"book_subject"(允许访问相应的表)和"book_id"(允许访问"book_subject"中指定的表中的书),而不是ForeignKey.

是一个很好的解决方案,以避免查询具有4百万行的表?

有替代解决方案吗?

谢谢^ __ ^

python django django-models django-database

9
推荐指数
2
解决办法
5368
查看次数

在Django中实现的ON DELETE CASCADE逻辑在哪里?(使用PostgreSQL)

我只需要确认一下Django专家对Django实现ON DELETE CASCADE的理解.

根据官方Django文档:

当Django删除一个对象时,默认情况下它会模拟SQL约束ON DELETE CASCADE的行为 - 换句话说,任何具有指向要删除的对象的外键的对象都将随之删除.

"模拟"一词是否意味着ON DELETE CASCADE逻辑实际上是在Django而不是在数据库级别实现的?(我查看了我的数据库,所有包含外键的表在其定义中都有ON DELETE NO ACTION.)

如果我的理解是正确的,有什么办法可以将ON DELETE CASCADE逻辑从app层重新定位到数据库层?我正在寻找一种正确的方式,而不是黑客.(注意:我使用PostgreSQL作为我的后端.)

django django-database

9
推荐指数
1
解决办法
1608
查看次数

django - 将db从sqlite3转换为postgres时出现loaddata错误

我正在尝试从sqlite3 db转换为Postgres(这样我就可以使用django 1.4获得时区感知日期时间字段).我从sqlite3 db中转储了数据.然后切换设置指向空postgres db.然后运行syncdb,然后运行南迁移.到目前为止都很好.

当我尝试将转储的数据重新加载到postgres时,我收到一个错误:

加载数据时发生异常:重复键值违反唯一约束"django_content_type_app_label_model_key"DETAIL:键(app_label,model)=(django_twilio,caller)已存在.

我从应用程序中删除了twilio,但仍然遇到类似的错误,只是数据库中的下一个对象.

任何帮助表示赞赏.我是编程和django的新手.谢谢!

django postgresql django-models django-database postgresql-9.1

9
推荐指数
1
解决办法
3308
查看次数

Django - 运行时数据库切换

在我的工作中,我们希望运行具有多个数据库的服务器.当您访问类似http://myapp.webpage.com或的URL时,应该进行数据库切换http://other.webpage.com.我们只想运行一个服务器实例,并在HTTP请求时切换数据库并返回相应的响应.

我们一直在寻找一种可持续的"Django友好"解决方案.在我们的调查中,我们找到了可行的方法,但我们没有足够的信息.

选项1:Django中间件

每当服务器收到HTTP请求时,django中间件就会运行.

  1. 在这里进行数据库切换可能是最好的选择,但据我所知只使用django数据库路由器只允许更改模型或组或模型的数据库.

  2. 另一个选择是在中间件中设置django模型管理器实例,并强制所有模型objects从自定义中间件中的添加属性重新分配属性.

  3. 我的最后一个选择是在中间件接收的请求对象中创建一个新属性,返回database aliasfrom settings.py和在每个模型查询中使用using方法.

选项2:基于类的View Mixin

创建一个使用过去三个选项的mixin,但我必须在所有基于类的视图中设置mixin.如果程序员忘记设置mixin并且它来到生产服务器,那么数据可能(或停止在)正确的数据库中,我不想承担风险.

选项3:在运行时更改数据库设置

此选项有效,但不建议使用,风险太大.

更新:

这是怎么回事?

middlewares.py

import django.conf as conf
import os.path


class SelectDB(object):

    def process_request(self, request):
        print request.META['HTTP_REFERER']
        file_database = open("booklog/database.txt", "r")
        database = file_database.read(10)
        file_database.close()
        if database != 'default':
            conf.settings.DATABASES['default']['NAME'] = database
Run Code Online (Sandbox Code Playgroud)

任何有助于我们解决的信息将不胜感激.

django django-middleware django-models django-managers django-database

9
推荐指数
1
解决办法
3809
查看次数

CommandError:您似乎没有安装“psql”程序或在您的路径上

我使用的是 Windows,没有 virtualenv。我使用 Pip 安装了 psycopg2,还安装了最新版本的 PostgreSQL。

当我运行时./ manage.py dbshell,出现以下错误:

CommandError: You appear not to have the 'psql' program installed or on your path.
Run Code Online (Sandbox Code Playgroud)

当我跑步时./ manage.py dbshell psql,我得到这个:

usage: manage.py dbshell [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                         [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                         [--database DATABASE]
manage.py dbshell: error: unrecognized arguments: psql
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些关于此错误的其他帖子但我不明白为什么这对我不起作用。我已正确配置所有设置,并安装所有正确的应用程序。

我的设置.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': '********',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我没有将 Postgres 的 /bin …

python django postgresql django-database django-settings

9
推荐指数
2
解决办法
2万
查看次数

django数据库删除特定的条目数

如何从数据库中删除特定数量的条目?我做了这样的事

EntriesToDelete=Statusmessages.objects.filter(time__lt=date)[:30000]
EntriesToDelete.delete()
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误,上面写着: AssertionError. Cannot use 'limit' or 'offset' with delete.

如何指定要删除的条目数.

python django django-database

8
推荐指数
1
解决办法
3053
查看次数

阻止Django查询ModelFormSet中每个表单的ForeignKey选项

我正在为我的Django应用程序构建一个csv导入表单,并希望在ModelFormSet出于验证目的显示要导入的行.

因此我添加了一个相关的视图,ModelAdmin它从csv中读取行并打印出一个ModelFormSet(queryset=an_empty_queryset, initial={data_from_the_csv}).

问题是模型通过ForeignKey字段引用其他三个模型,并且对于formset 中每个表单中的每个字段,都会发出数据库查询以填充ModelChoiceField选项.

为什么Django不缓存表单(因为它被多次使用)或者是否已经有办法实现这个我还不知道呢?

django django-forms django-database

8
推荐指数
1
解决办法
1578
查看次数

在Django中创建只读MySQL数据库连接

是否可以添加到数据库的连接,因此在使用它时只允许选择查询?

像这样的东西会很棒:

DATABASES = {
    #can do update, insert, etc...
    'default': { 
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'root',
        'PASSWORD': '12345',
    }
    #select only
    'default_readonly': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'PASSWORD': '12345',
        'READONLY': True,

    }
}
Run Code Online (Sandbox Code Playgroud)

我没有发现任何简单的事情.

mysql django django-database

8
推荐指数
3
解决办法
5370
查看次数

将数据库从本地开发迁移到Heroku-Django 1.8

使用后建立数据库后heroku addons:create heroku-postgresql:hobby-dev,我尝试将本地数据库迁移到heroku数据库.所以我先跑了

heroku python manage.py migrate.之后我用我的本地数据库创建了一个转储文件pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dump.我将mydb.dump文件上传到dropbox,然后使用以下命令将转储加载到我的heroku数据库

 heroku pg:backups restore'https://www.dropbox.com/s/xkc8jhav70hgqfd/mydb.dump?' HEROKU_POSTGRESQL_COLOR_URL
Run Code Online (Sandbox Code Playgroud)

但是,这会引发以下错误 -

 r004 ---restore---> HEROKU_POSTGRESQL_PURPLE
 [0KRunning... 0.00B..
 [0KAn error occurred and your backup did not finish.
 Please run `heroku pg:backups info r004` for details.
Run Code Online (Sandbox Code Playgroud)

在跑步时heroku pg:backups info r004我得到 -

Database:    BACKUP
Started:     2015-06-25 18:19:37 +0000
Finished:    2015-06-25 18:19:38 +0000
Status:      Failed
Type:        Manual
Backup Size: 0.00B
=== Backup Logs
2015-06-25 …
Run Code Online (Sandbox Code Playgroud)

python django postgresql heroku django-database

8
推荐指数
2
解决办法
2408
查看次数