用户创建的动态数据库 - django

Posted

技术标签:

【中文标题】用户创建的动态数据库 - django【英文标题】:dynamic databases created by users - django 【发布时间】:2014-02-16 10:13:13 【问题描述】:

我想创建一个网站,用户可以在其中登录并创建自己的数据库(并且还可以操作它们)。这些数据库将非常小,主要用于测试。阅读suggestedsolutions hereon SO看来我有几个选择:

使用预定义的功能(建议here)将数据库动态添加到settings.py。我发现这是一个非常糟糕的主意,因为它看起来像一个 hack 并且暴露了你自己的 settings.py 文件。 将 SQlite 文件存储在媒体中,并使用 django.db.connections 连接到它们。这似乎是一个合理的解决方案,虽然我不知道如何执行它。 不要使用实际的数据库,而是使用 XML 或其他格式来存储信息,这可能会降低我的效率 我自己的想法,这可能是疯狂的愚蠢 - 将 SQlite 文件作为 blob 存储在 mysql 数据库中。

最终目标是允许用户在网站上创建 django 模型,然后对它们执行查询(这是一个学习网站)。有任何想法吗?

【问题讨论】:

另一种选择怎么样,只需为每个用户创建一个新的 Django 项目,使用它自己的 virtualenv 和自己的 sqlite 数据库,这样你就可以完全分离? 这不是一个坏主意。如果你可以用一些伪代码来扩展它,即使我可能会将它标记为答案 【参考方案1】:

略多于伪代码,使用织物 :)

from fabric import api

def django_start_project(project_name):
    api.run('mkproject %s' % project_name)  # Assumes you have virtualenvwrapper
    with api.prefix('workon %s' % project_name):
        api.run('pip install django')
        api.run('django-admin.py startproject')

当然,最后一部分需要一些工作,但这是要点:)

这样称呼:

fab django_start_project:your_project

依赖关系:

面料:http://docs.fabfile.org/ 虚拟环境:http://www.virtualenv.org/ 虚拟环境包装器:http://virtualenvwrapper.readthedocs.org/

【讨论】:

我以前从未听说过织物。极好的。我仍然需要找到一种方法来创建 virtualenv,对吧?我不能为此使用织物(或者我可以吗?) 如果您安装并设置了 virtualenv 和 virtualenvwrapper,上面的示例已经创建了 virtualenv。 mkproject 是一个 virtualenvwrapper 命令,它在 PROJECT_HOME 中创建一个新目录,在 WORKON_HOME 中创建一个 virtualenv。文档:virtualenvwrapper.readthedocs.org/en/latest/… 哦。我以为你的意思是字面意思 - 一个用作包装器的 virtualenv,我不知道实际上有一个具有该名称的 python 模块,呵呵。太棒了,我会直接进入它

以上是关于用户创建的动态数据库 - django的主要内容,如果未能解决你的问题,请参考以下文章

Django 动态切换数据库

Django:在按钮按下时提供动态生成的数据作为附件

动态 html 使用 django 应用程序中 JSON 链接中的数据选择下拉列表

在django中动态地向表中添加字段

Django:以编程方式/动态创建数据库表

(转)Django学习之 第三章:动态Web页面基础