问题标签 [django-database]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
190 浏览

django - django-models 数据库排序规则问题:声明一个支持 unicode 的字段?

我遇到了这个问题。当我无法将 unicode 字符串分配给models.CharField.

我找到了这个解决方案,但它似乎对我不起作用。数据库返回此错误:

此外,所有这些解决方案似乎只有在创建表后才能工作,或者修改 python manage.py sql APP_NAME 输出并手动创建表。

有没有办法从最初在 python 代码中声明 django 模型时解决这个问题,所以 manage.py syncdb 只会生成正确的表?

0 投票
2 回答
8255 浏览

python - Django:在 Django 启动时只调用一次方法

我想在 Django 启动时初始化一些变量(来自数据库)。

我能够从数据库中获取数据,但问题是我应该如何调用初始化方法。这应该只调用一次。

尝试查看其他页面,但找不到答案。

代码目前看起来像这样::


def get_latest_dbx(请求,....):

#从数据库中获取数据


def get_latest_x(请求):

get_latest_dbx(请求,x,...)


def 启动(请求):

get_latest_x(请求)

0 投票
4 回答
186 浏览

python - 如何从 Django 记录器中检索真正的 SQL?

我正在尝试分析我们的 Django (1.3) Web 应用程序的 SQL 性能。我添加了一个附加到django.db.backends并设置的自定义日志处理程序DEBUG = True,这使我可以查看所有正在执行的数据库查询。

但是 SQL 不是有效的 SQL!实际查询是select * from app_model where name = %s使用传入的一些参数(例如"admin"),但是日志消息没有引用参数,所以 sql 是select * from app_model where name = admin,这是错误的。这也发生在使用django.db.connection.queries. AFAIK django 调试工具栏有一个复杂的自定义光标来处理这个问题。

更新对于那些建议使用 Django 调试工具栏的人:我知道那个工具,它很棒。但是它不能满足我的需要。我想运行我们应用程序的示例交互,并聚合使用的 SQL。DjDT 非常适合展示和浅层学习。但对于汇总和总结数十页的交互作用并不好。

是否有任何简单的方法来获得运行的真实、合法的 SQL?

0 投票
4 回答
7497 浏览

python - git merge 与我们的数据库文件冲突(多个开发人员)

我和一个朋友正在开发一个 Django 应用程序并使用 git。

在我们工作的过程中,我们会在我们的网站上创建虚假帐户、登录并将内容上传到数据库等......出于测试目的。每次合并分支时,我们的数据库文件中都会出现合并冲突。数据库文件位于存储库中,并且由于我们是单独测试的,因此文件的本地副本的开发方式不同。

如何防止数据库文件被跟踪,以便我们每个人都可以保留本地副本?

通过以下方式,我们能够避免使用本地路径:

理想的情况是:


我们如何防止我们的数据库文件被提交?

0 投票
2 回答
49502 浏览

django - 添加索引 (db_index=True)

我正在阅读一本关于 Django 编码风格的书,他们讨论的一件事是db_index=True. 自从我开始使用 Django 以来,我从未使用过此功能,因为我不确定它的作用。

所以我的问题是,何时考虑添加索引?

0 投票
1 回答
2244 浏览

django - Django & 软删除:实现架构

定义

  • SOFT DELETE - 不从数据库中删除对象,但似乎这样做
  • HARD DELETE - 从数据库中完全删除对象

问题

在代码库(特别是 Django 项目)中实现软删除的最佳方法是什么?

我认为最简单的方法是简单地添加:

到实现 a 的超类softDeleteObject,然后覆盖delete()以在相关对象上设置适当的标志。相关对象也需要从同一个超类继承。

另一种方法是删除原始文件,并拥有相当于存档对象的内容,该对象是已删除对象的表示。

分析

第一个似乎具有更大程度的简单性,但确实需要一些广泛的覆盖 - 例如,User必须覆盖以确保所有已删除对象的外键关系仍然保持,并且删除用户然后没有' t 硬删除所有软删除的对象。

第二个可以使用触发创建代理对象的 pre_delete 信号来实现。这同样有一些优点(不需要覆盖所有delete()方法),但确实需要实现项目中使用的模型的存档版本。

哪个更可取,还有其他选择吗?

0 投票
1 回答
2096 浏览

django - 防止 Django 为 ModelFormSet 中的每个表单查询 ForeignKey 选项

我正在为我的 Django 应用程序构建一个 csv 导入表单,并希望在 a 中显示要导入的行以ModelFormSet进行验证。

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

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

为什么 Django 不缓存表单(因为它被多次使用)或者已经有一种我不知道的方法来完成这个?

0 投票
2 回答
3136 浏览

django - Django 独特的批量插入

我需要能够快速批量插入大量记录,同时仍确保数据库中的唯一性。要插入的新记录已经被解析,并且是唯一的。我希望有一种方法可以在数据库级别而不是在代码本身中强制执行唯一性。

我使用 MySQL 作为数据库后端。如果 django 在任何其他数据库中支持此功能,我可以灵活地更改后端,因为这是一个要求。

Django中的批量插入不使用该save方法,那么如何一次插入几百到几千条记录,同时仍然尊重唯一字段和唯一一起字段?


我的模型结构经过简化,看起来像这样:

编辑:

应该插入尚未在数据库中的记录,而应该忽略已经存在的记录。

0 投票
1 回答
1829 浏览

python - 同一数据库列的多个字段

我们正在尝试使用prefetch_related. 它可以遵循GenericForeignKey关系,并且可以更深入地了解,__但不幸的是,如果相关模型没有这样的领域,它就会失败。

这是模型结构的一些示例

因此ModelCinstance 可以指向ModelAModelB。而且我可以使用这样的查询集来预取 A 和 B 模型:ModelC.objects.all().prefetch_related('content_object')不幸的是,我还需要选择事件对象(SomeModelASomeModelB

如果我尝试跑步

如果我只有ModelC指向 的实例,它将起作用ModelA,但在其他情况下,它将失败,因为ModelB没有该event_object字段event而是有。

此模型在代码中的许多地方使用,因此重命名该字段不是一个好主意。所以我想知道是否有办法为字段/列创建别名。

我试图这样做:

使两个字段指向数据库表中的同一列。但是,这不起作用,因为它破坏了save方法。Django 创建一个UPDATESQL 查询,其中一列放置两次并得到一个 DatabaseError

有没有办法创建这样的别名?或者也许有另一种解决方案可以prefetch_related不抛出异常?

更新:在save方法中有一个update_fields参数可以用来排除这个字段。但是它是在 1.5 中引入的,我们使用的是 1.4。所以我继续寻找答案。

更新 #2:@shx2 要求我提供回溯。有 2 种可能的回溯。第一个 - 当第一个对象上缺少属性时:

如果 prefetch_related 参数对第一个对象有效,那么我得到第二个回溯:

0 投票
1 回答
173 浏览

django - 如何将 Django 日志存储在数据库中?

我想将我的应用程序日志(信息而不是错误日志)存储在数据库中,以便进一步使用它在网络上显示。请给我一个好的方法。