代码之家  ›  专栏  ›  技术社区  ›  cookiedough

Django如何使用connection\u创建的信号

  •  1
  • cookiedough  · 技术社区  · 7 年前

    connection_created

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

    所以我认为使用这个信号将是一个很好的解决方案。我想在建立连接后运行一个函数。我找不到任何关于这个信号用例的文档。 connection_created.connect 可能是要使用的函数。这个函数接受一系列参数,但相关的参数是 self , receiver , sender weak .有人知道我如何使用这些参数和这个函数在新的连接实例上运行我的函数吗?

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

    2 回复  |  直到 6 年前
        1
  •  7
  •   Community George Stocker    4 年前

    在里面 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 ,该信号接收两个参数:

    发件人

    联系

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

        2
  •  0
  •   Andy    5 年前

    Django支持postgres模式:

    class MyModel(models.Model):
        id = models.IntegerField(primary_key=True)
        title = models.TextField()
    
        class Meta:
            db_table = '"schema_name"."table_name"'