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。我说的是我总是不覆盖默认值的情况。
我有一个包含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百万行的表?
有替代解决方案吗?
谢谢^ __ ^
我只需要确认一下Django专家对Django实现ON DELETE CASCADE的理解.
根据官方Django文档:
当Django删除一个对象时,默认情况下它会模拟SQL约束ON DELETE CASCADE的行为 - 换句话说,任何具有指向要删除的对象的外键的对象都将随之删除.
"模拟"一词是否意味着ON DELETE CASCADE逻辑实际上是在Django而不是在数据库级别实现的?(我查看了我的数据库,所有包含外键的表在其定义中都有ON DELETE NO ACTION.)
如果我的理解是正确的,有什么办法可以将ON DELETE CASCADE逻辑从app层重新定位到数据库层?我正在寻找一种正确的方式,而不是黑客.(注意:我使用PostgreSQL作为我的后端.)
我正在尝试从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
在我的工作中,我们希望运行具有多个数据库的服务器.当您访问类似http://myapp.webpage.com或的URL时,应该进行数据库切换http://other.webpage.com.我们只想运行一个服务器实例,并在HTTP请求时切换数据库并返回相应的响应.
我们一直在寻找一种可持续的"Django友好"解决方案.在我们的调查中,我们找到了可行的方法,但我们没有足够的信息.
每当服务器收到HTTP请求时,django中间件就会运行.
在这里进行数据库切换可能是最好的选择,但据我所知只使用django数据库路由器只允许更改模型或组或模型的数据库.
另一个选择是在中间件中设置django模型管理器实例,并强制所有模型objects从自定义中间件中的添加属性重新分配属性.
我的最后一个选择是在中间件接收的请求对象中创建一个新属性,返回database aliasfrom settings.py和在每个模型查询中使用using方法.
创建一个使用过去三个选项的mixin,但我必须在所有基于类的视图中设置mixin.如果程序员忘记设置mixin并且它来到生产服务器,那么数据可能(或停止在)正确的数据库中,我不想承担风险.
此选项有效,但不建议使用,风险太大.
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
我使用的是 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 …
如何从数据库中删除特定数量的条目?我做了这样的事
EntriesToDelete=Statusmessages.objects.filter(time__lt=date)[:30000]
EntriesToDelete.delete()
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误,上面写着:
AssertionError. Cannot use 'limit' or 'offset' with delete.
如何指定要删除的条目数.
我正在为我的Django应用程序构建一个csv导入表单,并希望在ModelFormSet出于验证目的显示要导入的行.
因此我添加了一个相关的视图,ModelAdmin它从csv中读取行并打印出一个ModelFormSet(queryset=an_empty_queryset, initial={data_from_the_csv}).
问题是模型通过ForeignKey字段引用其他三个模型,并且对于formset 中每个表单中的每个字段,都会发出数据库查询以填充ModelChoiceField选项.
为什么Django不缓存表单(因为它被多次使用)或者是否已经有办法实现这个我还不知道呢?
是否可以添加到数据库的连接,因此在使用它时只允许选择查询?
像这样的东西会很棒:
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)
我没有发现任何简单的事情.
使用后建立数据库后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)