2012-05-01 10 views
7

Tengo un código binario de Python que usa SQLite como su base de datos back-end. documentación de SQLite y el código sugiere que la fijación de cualquiera de los siguientes 3 variables de entorno debería funcionar:Configuración del directorio del almacén de sqlite

export TMP=/var/tmp/sqlite/ 
export TEMP=/var/tmp/sqlite/ 
export TEMPDIR=/var/tmp/sqlite/ 

Si puedo exportar las variables anteriores en mi escritura del golpe justo antes de empezar mi binaria Python, no ayuda.

Otra opción Probé está llamando putenv() estableciendo os.environ:

os.environ['TMP'] = /var/tmp/sqlite/ 
os.environ['TEMP'] = /var/tmp/sqlite/ 
os.environ['TEMPDIR'] = /var/tmp/sqlite/ 

Ninguna de las opciones anteriores ha ayudado a persuadir a utilizar SQLite /var/tmp/sqlite como su directorio de almacenamiento temporal. La única opción que ha funcionado - lo que la documentación de SQLite dice está en desuso - está estableciendo la declaración temp_store_directory pragma:

PRAGMA temp_store_directory = '/egnyte/.work/sqlite_temp' 

Desde mediante la instrucción pragma no es la opción que desea hacer, ¿hay algún otro truco?

Respuesta

7

Las variables de entorno a las que se refiere son en realidad lo que busca sqlite pero en Windows, no en UNIX.

En Unix, la variable de entorno tiene que configurar es TMPDIR como se muestra en las fuentes:

static const char *unixTempFileDir(void){ 
    static const char *azDirs[] = { 
    0, 
    0, 
    "/var/tmp", 
    "/usr/tmp", 
    "/tmp", 
    0  /* List terminator */ 
    }; 
    unsigned int i; 
    struct stat buf; 
    const char *zDir = 0; 

    azDirs[0] = sqlite3_temp_directory; 
    if(!azDirs[1]) azDirs[1] = getenv("TMPDIR"); 
    for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); zDir=azDirs[i++]){ 
    if(zDir==0) continue; 
    if(osStat(zDir, &buf)) continue; 
    if(!S_ISDIR(buf.st_mode)) continue; 
    if(osAccess(zDir, 07)) continue; 
    break; 
    } 
    return zDir; 
} 
1

Para la versión 3.8.1+ (publicada en octubre de 2013), es más limpio a utilizar la nueva variable de entorno SQLITE_TMPDIR en lugar de TMPDIR, ya que este último es utilizado por el software Unix que no sea SQLite.

Desde el release notes:

El directorio utilizado para almacenar archivos temporales en UNIX ahora se puede establecer utilizando la variable de entorno SQLITE_TMPDIR, que prevalece sobre la variable de entorno TMPDIR. Sin embargo, la variable global sqlite3_temp_directory aún tiene una mayor precedencia que ambas variables de entorno.

Cuestiones relacionadas