sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL PL/Python:oproep opgeslagen procedure in virtualenv

Er is een manier om het te doen, zo blijkt. Sinds versie 1.6 of zo ongeveer, wordt virtualenv geleverd met een script activate_this.py , die kan worden gebruikt om een ​​bestaande tolk in te stellen om toegang te krijgen tot die specifieke virtualenv.

exec(open('/Some/VirtualEnv/Directory/myvirtualenv/bin/activate_this.py').read(), 
dict(__file__='/Some/VirtualEnv/Directory/myvirtualenv/bin/activate_this.py'))

En als een volledig gerealiseerde plpython-functie:

CREATE OR REPLACE FUNCTION workon(venv text)
  RETURNS void AS
$BODY$
    import os
    import sys

    if sys.platform in ('win32', 'win64', 'cygwin'):
        activate_this = os.path.join(venv, 'Scripts', 'activate_this.py')
    else:
        if not os.environ.has_key('PATH'):
            import subprocess
            p=subprocess.Popen('echo -n $PATH', stdout=subprocess.PIPE, shell=True)
            (mypath,err) = p.communicate()
            os.environ['PATH'] = mypath

        activate_this = os.path.join(venv, 'bin', 'activate_this.py')

    exec(open(activate_this).read(), dict(__file__=activate_this))
$BODY$
LANGUAGE plpythonu VOLATILE

(De extra PATH-mungery is nodig omdat PATH standaard niet beschikbaar is in plpython os.environ -activate_this.py heeft een opgelost ingecheckt die zou moeten rollen met de volgende puntrelease (die 1.11.7 of 1.12) zou moeten zijn

(meestal overgenomen van https://gist.github.com/dmckeone/69334e2d8b27f586414a )



  1. Geaggregeerde functies gebruiken (SUM, AVG, MAX, MIN, COUNT, DISTINCT) in MySQL

  2. hoe print een record uit de database wanneer de gebruiker opties selecteert in het vervolgkeuzemenu? dynamisch programma

  3. Isql gebruiken met een Connection String

  4. Voordelen en nadelen van het gebruik van opgeslagen procedures