在我的Django项目上进行开发时,我得到一个DatabaseError,它说:
当前事务被中止,命令被忽略直到事务块结束
我知道这是因为没有回滚的PostgreSQL事务很糟糕,并且可以在PostgreSQL错误日志中找到此错误事务中的错误.但是,如果在Django错误页面上显示此错误,我认为会更方便.然后你可以直接看到问题所在.
那么,是否有可能在Django错误页面上获得这些PostgreSQL错误?如果是这样,怎么样?
我遇到了Django应用程序的问题.对模型Scope的查询极其缓慢,经过一些调试后我仍然不知道问题所在.
当我scope = Scope.objects.get(pk='Esoterik I')在django中查询db 时需要5到10秒.该数据库的主键少于10个条目和索引.所以这太慢了.在db上执行等效查询时,SELECT * FROM scope WHERE title='Esoterik I';一切正常,只需要大约50ms.
如果我使用一组结果进行查询,scope_list = Scope.objects.filter(members=some_user)然后执行例如print(scope_list)或迭代列表的元素,则会出现同样的问题.查询本身只需要几毫秒,但元素的打印或迭代再次需要5到10秒,但该集只有两个条目.
数据库后端是Postgresql.问题在本地开发服务器和apache上发生相同.
这里是模型的代码:
class Scope(models.Model):
title = models.CharField(primary_key=True, max_length=30)
## the semester the scope is linked with
assoc_semester = models.ForeignKey(Semester, null=True)
## the grade of the scope. can be Null if the scope is not a class
assoc_grade = models.ForeignKey(Grade, null=True)
## the timetable of the scope. can be null if the scope is not direct associated with …Run Code Online (Sandbox Code Playgroud) database django performance django-queryset django-postgresql
安装django_postgrespool并相应地配置我的项目后,我收到以下错误:
Traceback (most recent call last):
File "C:\Users\Administrator\Documents\my_proj\my_module.py", line 14, in <module>
from cortex.my_app.models import MyModel
File "C:\Users\Administrator\Documents\my_proj\my_app\models.py", line 3, in <module>
from django.db import models
File "C:\Users\Administrator\virtual_environments\spyker\lib\site-packages\django\db\__init__.py", line 40, in <module>
backend = load_backend(connection.settings_dict['ENGINE'])
File "C:\Users\Administrator\virtual_environments\spyker\lib\site-packages\django\db\__init__.py", line 34, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Users\Administrator\virtual_environments\spyker\lib\site-packages\django\db\utils.py", line 92, in __getitem__
backend = load_backend(db['ENGINE'])
File "C:\Users\Administrator\virtual_environments\spyker\lib\site-packages\django\db\utils.py", line 44, in load_backend
raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: 'django_postgrespool' isn't an available database backend.
Try using django.db.backends.XXX, where XXX is one of:
'dummy', 'mysql', …Run Code Online (Sandbox Code Playgroud) 我有以下django admin exceprt:
class TagAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
list_display = ['title', 'total_videos', 'total_active_videos', 'weight', 'status']
search_fields = ['title']
list_filter = ['status']
ordering = ['-weight']
def queryset(self, request):
return Tag.objects.annotate(total_videos_order=Count('video'))
def total_videos(self, obj):
return obj.total_videos_order
total_videos.admin_order_field = 'total_videos_order'
def total_active_videos(self, obj):
return u'%s' % Video.objects.filter(tags=obj, status=Video.STATUS_ACTIVE).count()
Run Code Online (Sandbox Code Playgroud)
现在一切正常,total_videos和total_active_videos都显示正确的信息.如果单击表标题,total_videos也是可排序的.但是,如果我尝试将代码更改为:
ordering = ['total_videos_order']
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
TagAdmin.ordering [0]'指的是模型'videos.Tag'中缺少的字段'total_videos_order'.
如果它只是"total_videos"相同.作为一种解决方法,我可以忽略它,只需点击标题,但它困扰我的原因,如果通过单击默认顺序排序无法设置,当字段显然存在?有什么想法吗?
问题的第二部分是否可以在过滤字段"total_active_videos"上添加排序.根据我的理解,它不可能用条件注释,因此它不能像"total_videos"那样完成,但还有其他解决方案吗?
谢谢!
关于模型的pk值有多高可以获得最大值吗?例如,对于像活动Feed模型这样的东西,pk可以变得非常大.
例如,"Kyle喜欢这篇文章","Alex评论了这篇文章"等等.你可以看到,对于每个动作,都会创建一个活动供稿对象.是否会达到某种最大阈值?我做了一些研究,但没有找到简明的答案.如果有一些限制,怎么能克服这个?
我目前使用PostgreSQL作为我的数据库.
我在我的django应用程序中使用postgres,我在数据库中手动创建了hstore扩展.但是,当我运行测试时,它会尝试创建一个新数据库,并在找不到hstore扩展时失败.
我收到以下错误:
django.db.utils.ProgrammingError: hstore type not found in the database. please install it from your 'contrib/hstore.sql' file
Run Code Online (Sandbox Code Playgroud)
我按照这篇文章更新了我的迁移,结果如下:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
from django.contrib.postgres.operations import HStoreExtension
import django.contrib.postgres.fields
import django.contrib.postgres.fields.hstore
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
HStoreExtension(),
migrations.CreateModel(
name='AppUser',
fields=[
('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)),
('created_date', models.DateTimeField(auto_now_add=True)),
('modified_date', models.DateTimeField(auto_now=True)),
('lock', models.BooleanField(default=False)),
('username', models.CharField(max_length=100)),
('email', models.EmailField(max_length=150)),
('social_data', django.contrib.postgres.fields.hstore.HStoreField(blank=True, default='')), …Run Code Online (Sandbox Code Playgroud) 我试图获取特定列中所有不同值的计数,例如我在模型名称MyModel中有以下表:
Id City vendor
1 Mumbai 2
2 Pune 3
3 Mumbai 1
4 Yavatmal 2
5 Pune 5
Run Code Online (Sandbox Code Playgroud)
我正在寻找像这样的输出:
[{'Mumbai':2},{'Pune':2},{'Yavatmal':1}]
Run Code Online (Sandbox Code Playgroud) 有人ELI5有什么CONN_MAX_AGE吗?我认为它的工作原理如下:
1)请求#1进入,打开数据库连接1
2)请求#1使用连接1做一些工作
3)请求#1完成.由于CONN_MAX_AGE非零(并且尚未达到年龄),因此连接保持打开状态.
4)请求#2进入,Django重新使用连接#1到数据库.
但这似乎并没有发生.我的网站上有一个页面,每15秒进行一次AJAX轮询.在我的开发环境中,我看到开放连接(select count(*) from pg_stat_activity)的数量,慢慢增长,直到最终我得到
OperationalError: FATAL: sorry, too many clients already
Run Code Online (Sandbox Code Playgroud)
所以我想知道我哪里出错了.CONN_MAX_AGE是否仅用于在单个HTTP请求中保持连接打开?
更新:
仔细查看文档,我看到了:
开发服务器为它处理的每个请求创建一个新线程,否定持久连接的影响.在开发过程中不要启用它们.
啊,所以这似乎意味着一个连接"属于"一个线程.(并且线程可以基于CONN_MAX_AGE的值打开/关闭连接).
我有一个像下面这样的元组列表 -
[(float.inf, 1.0), (270, 0.9002), (0, 0.0)]
我正在寻找一个简单的序列化器/反序列化器,它可以帮助我将此元组存储在 PostgreSQL 的 jsonb 字段中。
我尝试使用JSONEncoder().encode(a_math_function)但没有帮助。
我在尝试将上述列表存储在 jsonb 字段中时遇到以下错误 -
django.db.utils.DataError: invalid input syntax for type json
LINE 1: ...", "a_math_function", "last_updated") VALUES (1, '[[Infinit...
DETAIL: Token "Infinity" is invalid.
Run Code Online (Sandbox Code Playgroud)
注意:字段 a_math_function 是 JSONField() 类型
我试图运行python3 manage.py migrate,但出现此错误:
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django /db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: cannot cast type integer to uuid
LINE 1: ...BLE "core_post" ALTER COLUMN "id" TYPE uuid USING "id"::uuid
Run Code Online (Sandbox Code Playgroud)
我正在使用PostgreSQL
我的models.py: 链接到pastebin
我希望你能帮助我)
谢谢!
django postgresql django-models django-postgresql django-migrations
django ×9
django-orm ×2
python ×2
admin ×1
database ×1
debugging ×1
infinity ×1
orm ×1
performance ×1
postgresql ×1
primary-key ×1
python-3.x ×1