小编e4c*_*4c5的帖子

mod_wsgi:通过Inotify重新加载代码 - 不是每N秒

到目前为止,我按照这个建议重新加载代码:

https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode.wiki

这具有缺点,即每N秒仅检测到代码变化.我可以使用N = 0.1,但这会导致无用的磁盘IO.

AFAIK可以通过python获得linux内核的inotify回调.

是否有更快的方法来检测代码更改并重新启动wsgi处理程序?

我们在linux上使用守护进程模式.

为什么代码重新加载mod_wsgi

有兴趣为什么我想要这个.这是我的设置:

大多数人使用" manage.py runserver"进行开发,并使用其他一些wsgi部署进行生产.

在我的背景下,我们自动创建了新系统,产品和开发系统大多相同.

一个操作系统(linux)可以托管N个系统(虚拟环境).

开发人员可以使用runserver或mod_wsgi.使用runserver有一个好处,它易于调试,mod_wsgi具有不需要首先启动服务器的好处.

mod_wsgi有一个好处,你知道URL: https://dev-server/system-name/myurl/

使用runserver,您不知道端口.使用案例:您想要从内部维基链接到开发系统....

我们过去使用过mod_wsgi的代码重新加载的脏黑客攻击:maximum-requests=1但这很慢.

python django mod-wsgi inotify

11
推荐指数
1
解决办法
522
查看次数

如何在Django迁移中创建GIN索引

在Django中,从版本1.11开始,我们有一个PostgreSQL类GinIndex(https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/).我想创建一个迁移,在VectorSearchField我添加到我的一个表中构建这样的索引.到目前为止,我试图简单地添加db_index=TrueVectorSearchField,但失败了,因为它试图创建一个B树索引(我认为),并且VectorSearchField值太长.

我设法通过运行migrations.RunSQL()迁移来创建我想要的索引:

CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);
Run Code Online (Sandbox Code Playgroud)

但是,我想,因为GinIndexDjango中有一个特殊的类,也许有一种方法可以在不执行原始SQL的情况下创建这样的索引?

这是一个模型类:

import django.contrib.postgres.search as pg_search

class EntryLine(models.Model):
    speaker = models.CharField(max_length=512, db_index=True)
    text = models.TextField()
    sv = pg_search.SearchVectorField(null=True)  # I want a GIN index on this field.
Run Code Online (Sandbox Code Playgroud)

知道如何sv在迁移中正确创建字段索引吗?或者CREATE INDEX ...以最佳方式执行查询?

migration django postgresql indexing django-migrations

11
推荐指数
1
解决办法
3260
查看次数

Mysql错误:在linux服务器上导入sql文件时ASCII'\ 0'

导入sql文件时出现以下错误

ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. 
Set --binary-mode to 1 if ASCII '\0' is expected. Query: ''.
Run Code Online (Sandbox Code Playgroud)

需要帮助...!!

mysql mysqldump phpmyadmin mysqlimport

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

从所有用户删除会话密钥

当用户登录时,一些细节会保存到会话中,让我们说使用key ='user_settings'

当系统内发生某些更新时,我需要遍历所有用户并从每个用户会话中删除"user_settings"键.这样我就会触发从数据库中加载新鲜的细节.

如何遍历所有会话并从每个会话中删除密钥?

django django-sessions

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

Django F()部门 - 如何避免四舍五入

我有这个代码:

q = MyModel.objects.order_by('-value1').annotate(
            res=ExpressionWrapper(
                (F('value1') / F('value2')), 
                output_field=FloatField()),
            )

for i in q:                                          
    print(i.value1, i.value2, i.res)
Run Code Online (Sandbox Code Playgroud)

所以,输出将是:

5 10 0.0
1 2 0.0
Run Code Online (Sandbox Code Playgroud)

但是我需要

5 10 0.5
1 2 0.5
Run Code Online (Sandbox Code Playgroud)

Wy F()将结果四舍五入?怎么不这样做?

谢谢!

python django django-queryset

9
推荐指数
4
解决办法
2187
查看次数

如何在SQL中绕过Django自定义数据库函数调用括号?

对问题的简短介绍......

  • PostgreSQL有非常简洁的数组字段(int数组,字符串数组)和函数,就像UNNESTANY.
  • 这些字段由Django支持(我正在使用djorm_pgarray它),但函数不是本机支持的.
  • 可以使用.extra(),但Django 1.8引入了一个新的数据库功能概念.

让我提供一个最原始的例子,说明我基本上对所有这些做了些什么.A Dealer有一个它支持的品牌列表.A Vehicle有一个品牌并且与经销商相关联.但事实上它Vehicle的制作与Dealer制作清单不匹配,这是不可避免的.

MAKE_CHOICES = [('honda', 'Honda'), ...]

class Dealer(models.Model):
    make_list = TextArrayField(choices=MAKE_CHOICES)

class Vehicle(models.Model):
    dealer = models.ForeignKey(Dealer, null=True, blank=True)
    make   = models.CharField(max_length=255, choices=MAKE_CHOICES, blank=True)
Run Code Online (Sandbox Code Playgroud)

拥有经销商和制造商的数据库,我想要计算车辆制造商及其经销商制造商列表所匹配的所有车辆.这就是我避免的方式.extra().

from django.db.models import functions

class SelectUnnest(functions.Func):
    function = 'SELECT UNNEST'

...

Vehicle.objects.filter(
    make__in=SelectUnnest('dealer__make_list')
).count()
Run Code Online (Sandbox Code Playgroud)

结果SQL:

SELECT COUNT(*) AS "__count" FROM "myapp_vehicle" 
INNER JOIN "myapp_dealer" 
  ON ( "myapp_vehicle"."dealer_id" = "myapp_dealer"."id" ) 
WHERE …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-orm

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

为什么Django会返回过时的缓存数据?

我有两个Django模型,如下所示,MyModel1&MyModel2:

class MyModel1(CachingMixin, MPTTModel):
    name = models.CharField(null=False, blank=False, max_length=255)
    objects = CachingManager()

    def __str__(self):
        return "; ".join(["ID: %s" % self.pk, "name: %s" % self.name, ] )

class MyModel2(CachingMixin, models.Model):
    name = models.CharField(null=False, blank=False, max_length=255)
    model1 = models.ManyToManyField(MyModel1, related_name="MyModel2_MyModel1")
    objects = CachingManager()

    def __str__(self):
        return "; ".join(["ID: %s" % self.pk, "name: %s" % self.name, ] )
Run Code Online (Sandbox Code Playgroud)

MyModel2有一个ManyToMany字段来MyModel1授权model1

现在看看当我向这个ManyToMany字段添加一个新条目时会发生什么.据Django说,它没有效果:

>>> m1 = MyModel1.objects.all()[0]
>>> m2 = MyModel2.objects.all()[0]
>>> m2.model1.all()
[]
>>> m2.model1.add(m1)
>>> m2.model1.all() …
Run Code Online (Sandbox Code Playgroud)

python django django-cache django-cache-machine

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

django:'python manage.py migrate'需要几个小时(和其他奇怪的行为)

我对models.py中的一个表进行了一些更改,并尝试使用'python manage.py migrate'进行迁移,这需要花费数小时.我只更改了三个字段(列)名称的名称,现在已经运行了2个多小时.今天早些时候创建这张桌子时,它在几分钟内就顺利运行了(我想).季节开始是改变的模型.

以下是来自models.py的内容:

from django.db import models
from django.contrib.gis.db import models as gismodels
# from django.contrib.gis import admin

# Create your models here.

class Location(models.Model): # table name automatically chirps_location
    locationID = models.IntegerField(default=0, primary_key=True)
    lat = models.FloatField(default=0.0)
    lon = models.FloatField(default=0.0)
    geom = gismodels.PointField(null=True)
    objects = gismodels.GeoManager()
    def __unicode__(self):
        return u"LocationID: " + unicode(self.locationID)

# admin.site.unregister(Location)
# admin.site.register(Location, admin.OSMGeoAdmin)


class Rainfall(models.Model):
    location = models.ForeignKey(Location)
    year = models.IntegerField(default=0)
    pentad_num = models.IntegerField(default=0)        
    pentad_val = models.FloatField(default=0.0)

    class Meta:
        ordering = ['location', 'year', 'pentad_num'] …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-migrations

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

如何用一个对该表唯一的不同整数替换Django的主键

我有一个Django Web应用程序,它使用默认的自动递增正整数作为主键.此密钥在整个应用程序中使用,并经常插入到URL中.我不想向公众公开这个号码,以便他们可以猜测我的数据库中的用户或其他实体的数量.

这是一个经常要求,我已经向类似的矿山看到了问题和答案.大多数解决方案建议散列原始主键值.但是,这些答案都不符合我的需要.这些是我的要求:

  1. 我想将主键字段类型保持为整数.
  2. 每次读取或写入或与数据库进行比较时,我也不希望不必散列/取消该值.这看起来很浪费这样做一次会很好:当记录最初插入数据库时
  3. 散列/加密功能不需要是可逆的,因为我不需要恢复原始顺序密钥.散列值只需要是唯一的.
  4. 散列值只需对于该表是唯一的 - 不是普遍唯一的.
  5. 散列值应尽可能短.我想避免使用极长(20个以上字符)的网址

实现这一目标的最佳方法是什么?以下工作会怎样?

def hash_function(int):
    return fancy-hash-function # What function should I use??


def obfuscate_pk(sender, instance, created, **kwargs):
    if created:
        logger.info("MyClass #%s, created with created=%s: %s" % (instance.pk, created, instance))
        instance.pk = hash_function(instance.pk)
        instance.save()
        logger.info("\tNew Pk=%s" % instance.pk)

class MyClass(models.Model):
    blahblah = models.CharField(max_length=50, null=False, blank=False,)


post_save.connect(obfuscate_pk, sender=MyClass)
Run Code Online (Sandbox Code Playgroud)

python mysql django hash primary-key

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

使用CAST或STR_TO_DATE链接JSON_EXTRACT失败

我正在尝试从MySQL中的JSONFIELD"数据"中提取日期时间.

但是,如果我执行简单的JSON_EXTRACT,则返回字段类型是JSON.

mysql> select JSON_EXTRACT(data, "$.new_time") from analytics limit 10;
+----------------------------------+
| JSON_EXTRACT(data, "$.new_time") |
+----------------------------------+
| NULL                             |
| "2016-09-30T04:00:00+00:00"      |
| "2016-09-29T05:30:00+00:00"      |
| NULL                             |
| "2016-10-01T05:30:00+00:00"      |
| "2016-09-27T23:00:00+00:00"      |
| NULL                             |
| "2016-09-23T01:30:00+00:00"      |
| "2016-09-23T04:00:00+00:00"      |
| "2016-09-27T01:30:00+00:00"      |
+----------------------------------+
Run Code Online (Sandbox Code Playgroud)

我想将其转换为MySQL DATETIME.但如果我链接JSON_EXTRACT和STR_TO_DATETIME,我会得到所有NULL值:

mysql> select STR_TO_DATE(JSON_EXTRACT(data, "$.new_time") ,"%Y-%m-%d") from analytics_calendaranalytics limit 10;
+-----------------------------------------------------------+
| STR_TO_DATE(JSON_EXTRACT(data, "$.new_time") ,"%Y-%m-%d") |
+-----------------------------------------------------------+
| NULL                                                      |
| NULL                                                      |
| NULL                                                      |
| NULL                                                      |
| NULL                                                      | …
Run Code Online (Sandbox Code Playgroud)

mysql sql database json mysql-json

7
推荐指数
1
解决办法
6493
查看次数