9
votes

Comment puis-je accéder à la connexion PSYCOPG2 basse niveau dans Django?

Je souhaite accéder à l'objet de connexion PSYCOPG2 basse niveau pour utiliser la classe psycopg2.extensions.lobject dans mon projet Django.

from django.db import connection


0 commentaires

3 Réponses :


0
votes

Si vous utilisez Django 1.2+, vous devez probablement changer cela pour:

from django.db import connections['default']


1 commentaires

Merci pour l'indice. Et je le ferai. Mais malheureusement, ce n'est toujours pas le lien dont j'ai besoin. C'est essentiellement une enveloppe autour de ma connexion PSYCOPG2.



8
votes

Vous pouvez voir de La source que de django.db Import Connection renvoie un BasewareWrapper pour la DB par défaut. dans le psycopg2 Backend Vous verrez que le BasewareWrapper accède à la connexion basse niveau via Connection.cursor (). Connexion . .


2 commentaires

C'est encore plus facile. Connection.Connection renvoie ce dont j'ai besoin.


@Oliverandrich connexion.Connection ne fonctionne pas pour moi dans les commandes de gestion. django.db.connection est un django.db.backend.postgresql_psycopg2.base.databasewrapper là-bas, qui a une connexion de aucun . (Testé à Django 1.8A1.) Connection.cursor (). Connexion semble encombrant mais fonctionne de manière fiable pour moi.



2
votes

Ces réponses sont bonnes mais non copypassables et avec des documents obsolètes, alors laissez-moi résoudre ce problème.
À partir de version 3 vous Utilisez la connexion brute comme celle

from django.db import connection

stmt = "SELECT * FROM foo"

with connection.cursor() as cursor:
    cursor.execute(stmt)


2 commentaires

Dans votre exemple, l'objet Connection est un django defaultConnectionProxy instance. La question consiste à accéder à l'objet de connexion PSYCOPG2 sous-jacent que vous pouvez utiliser à l'aide de Connection.cursor (). Connexion .


Ou connexion.connection , mais voir la mise en garde du commentaire de Heinrik Heimbueger sous La réponse de Mark Lavin ci-dessus.