Django如何使用connection_created信号

coo*_*ugh 1 python django django-signals

我想找出什么时候连接到我的Django数据库,或重新启动我的Django服务器.我找到了connection_created Django信号.描述是:

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

所以我认为使用这个信号对我的情况来说是一个很好的解决方案.我想在建立连接后运行一个函数.我找不到关于此信号用例的任何文档.connection_created.connect可能是使用的功能.这个函数在一堆参数,但有相关的的有 self,receiver,senderweak.有谁知道如何使用这些参数和这个函数在新的连接实例上运行我的函数?

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

alf*_*kim 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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

根据文档,这个信号有两个参数:

寄件人

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

连接

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