Django如何使用connection_created信号

时间:2017-07-18 15:27:56

标签: python django django-signals

我希望了解何时与我的Django数据库建立连接,或者重新启动我的Django服务器。我找到了connection_created Django信号。描述是:

  

数据库包装器与数据库建立初始连接时发送。如果您想将任何后连接命令发送到SQL后端,这将特别有用。

所以我认为使用这个信号对我的情况来说是一个很好的解决方案。我想在建立连接后运行一个函数。我找不到关于此信号用例的任何文档。 self可能是要使用的功能。此函数包含大量参数,但相关的参数包括receiversenderweakstring json2 = @"{ 'RootObject1':{ 't_date': '03-JAN-2016', 't_summary': 'test """"""""""""' } }"; var json3 = JsonConvert.SerializeObject(json2, Newtonsoft.Json.Formatting.None, new Newtonsoft.Json.JsonSerializerSettings{ StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml }); var myJsonObject = JsonConvert.DeserializeObject<RootObject1>(json3); class RootObject1 { public string t_date { get; set; } public string t_summary { get; set; } } 。有谁知道如何使用这些参数和这个函数在新的连接实例上运行我的函数?

如果除了这个信号之外还有任何其他解决方案,我很乐意听到它们。

2 个答案:

答案 0 :(得分:5)

我将所有表分布在动态postgres表模式中,并使用连接信号设置连接的搜索路径,因为django不支持postgres模式。

myapp/apps.py

中的

from django.db.backends.signals import connection_created

class MyappConfig(AppConfig):
    name = 'myapp'
    def ready(self):
        from myapp.schema_manager import new_connection
        connection_created.connect(new_connection)
myapp/schema_manager.py

中的

def new_connection(sender, connection, **kwargs):
    search_path = ['public'] + get_current_schemas()  # fetch the active schemas
    connection.cursor().execute("SET search_path TO %s;" % ', '.join(search_path)

根据the docs,此信号有两个参数:

  

<强>发送方

     

数据库包装器类 - 即django.db.backends.postgresql.DatabaseWrapper或django.db.backends.mysql.DatabaseWrapper等。

     

<强>连接

     

已打开的数据库连接。这可以在多数据库配置中使用,以区分来自不同数据库的连接信号。

答案 1 :(得分:0)

  

...因为django不支持postgres模式

Django支持postgres模式:

class MyModel(models.Model):
    id = models.IntegerField(primary_key=True)
    title = models.TextField()

    class Meta:
        db_table = '"schema_name"."table_name"'

我在我们所有的项目中都使用这种表示法。