Django 如何使用 connection_created 信号

曲奇饼干

我想知道什么时候连接到我的 Django 数据库,或者什么时候我的 Django 服务器重新启动。我找到了connection_created Django 信号。说明是:

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

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

此外,如果有人有除此信号之外的任何其他解决方案,我很乐意听到他们的声音。

阿方索·金

我的所有表都分布在动态 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)

根据docs,该信号接收两个参数:

发件人

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

联系

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章