设置sqlite临时存储目录

发布于 2021-01-29 16:26:48

我有一个使用SQLite作为其后端数据库的Python二进制文件。SQLite的文档和代码建议设置以下三个环境变量中的任何一个都可以工作:

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

如果在刚启动Python二进制文件之前将上述变量导出到bash脚本中,则无济于事。

我尝试的另一个选项是putenv()通过设置来调用os.environ

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

以上选项均无法帮助说服SQLite/var/tmp/sqlite用作其临时存储目录。起作用的唯一选项(不推荐使用SQLite的文档说)是设置temp_store_directorypragma语句:

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

由于我不希望使用pragma语句,因此还有其他技巧吗?

关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您所指的环境变量确实是sqlite所要查找的内容,但在Windows中而不是UNIX中。

    在Unix中,您需要设置的环境变量TMPDIR如源代码所示:

    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;
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看