【问题标题】:How can I access the low level psycopg2 connection in Django?如何访问 Django 中的低级 psycopg2 连接?
【发布时间】:2012-01-14 05:33:08
【问题描述】:

我想访问低级 psycopg2 连接对象以在我的 django 项目中使用 psycopg2.extensions.lobject 类。

from django.db import connection

没有提供我需要的东西。有人可以帮帮我吗?

【问题讨论】:

    标签: python django postgresql psycopg2


    【解决方案1】:

    你可以看到from the sourcefrom django.db import connection为默认数据库返回DatabaseWrapperIn the psycopg2 backend 你会看到DatabaseWrapper 通过connection.cursor().connection 访问低级连接。

    【讨论】:

    • 更简单。 connection.connection 返回我需要的内容。
    • @OliverAndrich connection.connection 在管理命令中对我不起作用。 django.db.connection 是一个django.db.backends.postgresql_psycopg2.base.DatabaseWrapper,它有一个connectionNone。 (在 Django 1.8a1 中测试。)connection.cursor().connection 看起来很麻烦,但对我来说工作可靠。
    【解决方案2】:

    这些答案很好,但不能复制粘贴并且文档过时,所以让我来解决这个问题。
    version 3 开始,您就使用这样的原始连接

    from django.db import connection
    
    stmt = "SELECT * FROM foo"
    
    with connection.cursor() as cursor:
        cursor.execute(stmt)
    

    【讨论】:

    • 在您的示例中,connection 对象是 Django DefaultConnectionProxy 实例。问题是关于访问底层 psycopg2 连接对象,您可以使用 connection.cursor().connection 来完成。
    • connection.connection,但请参阅上面Mark Lavin's answer 下Heinrik Heimbueger 评论中的警告。
    【解决方案3】:

    如果您使用的是 django 1.2+,您可能应该将其更改为:

    from django.db import connections['default']
    

    或类似的东西。

    【讨论】:

    • 感谢您的提示。我会这样做的。但遗憾的是,这仍然不是我需要的连接。它本质上是我 psycopg2 连接的包装器。
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2021-07-23
    • 2011-12-08
    • 2015-05-08
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多