将 Django ORM 用作独立的 [重复]

Posted

技术标签:

【中文标题】将 Django ORM 用作独立的 [重复]【英文标题】:Use Django ORM as standalone [duplicate] 【发布时间】:2010-10-30 13:54:52 【问题描述】:

可能的重复:Use only some parts of Django?Using only the DB part of Django

我想独立使用 Django ORM。尽管在 Google 上搜索了一个小时,但我仍然有几个问题:

是否需要我使用 setting.py、/myApp/ 目录和 modules.py 文件来设置我的 Python 项目? 我可以创建一个新的models.py 并运行syncdb 让它自动设置表和关系,还是我只能使用现有 Django 项目中的模型? 似乎有很多关于PYTHONPATH 的问题。如果您不调用现有模型,是否需要这样做?

我想最简单的事情是让某人发布一个基本模板或流程演练,阐明文件的组织,例如:

db/
   __init__.py
   settings.py
   myScript.py
orm/
   __init__.py
   models.py

以及基本要领:

# settings.py
from django.conf import settings

settings.configure(
     DATABASE_ENGINE   = "postgresql_psycopg2",
     DATABASE_HOST     = "localhost",
     DATABASE_NAME     = "dbName",
     DATABASE_USER     = "user",
     DATABASE_PASSWORD = "pass",
     DATABASE_PORT     = "5432"
)

# orm/models.py
# ...

# myScript.py
# import models..

以及是否需要运行类似:django-admin.py inspectdb ...

(哦,如果这改变了有关命令行参数的任何内容,我正在运行 Windows。)。

【问题讨论】:

William Brendel 链接的问题有最佳答案,但也请参阅***.com/questions/579511 进行更多讨论。 我想知道您是如何“在 google 上搜索 1 小时”并获得了 Van Gale 和 William Brendel 的 cmets 指出的问题。 它不是“完全重复的”——虽然那篇文章帮助我找到了答案,但它并不是我想要的。我希望关闭为“完全重复”不会改变我在下面的解决方案的可搜索性,因为它更彻底,以及如何创建在其他任何地方都没有的模型。 becomingGuru:因为我所有的搜索都是针对使用 Django 的 ORM。我没想到要搜索像如何使用部件 django 这样一般的东西 我创建了一个模板 Django 项目,它允许您这样做。 github.com/dancaron/Django-ORM 【参考方案1】:

嗯,好的,我想通了,并将为任何尝试做同样事情的人发布解决方案。

此解决方案假定您要创建新模型。

首先创建一个新文件夹来存储您的文件。我们将其称为“独立”。在“standAlone”中,创建以下文件:

__init__.py
myScript.py
settings.py

显然“myScript.py”可以命名为任何名称。

接下来,为您的模型创建一个目录。

我们将模型目录命名为“myApp”,但要意识到这是项目中的普通 Django 应用程序,因此,请根据您正在编写的模型集合适当地命名它。

在此目录中创建 2 个文件:

__init__.py
models.py

您将需要来自现有 Django 项目的 manage.py 副本,或者您可以从 Django 安装路径中获取副本:

django\conf\project_template\manage.py

将 manage.py 复制到您的 /standAlone 目录。好的,你现在应该有以下结构:

\standAlone
    __init__.py
    myScript.py
    manage.py
    settings.py
\myApp
    __init__.py
    models.py

将以下内容添加到您的 myScript.py 文件中:

# settings.py
from django.conf import settings

settings.configure(
    DATABASE_ENGINE    = "postgresql_psycopg2",
    DATABASE_NAME      = "myDatabase",
    DATABASE_USER      = "myUsername",
    DATABASE_PASSWORD  = "myPassword",
    DATABASE_HOST      = "localhost",
    DATABASE_PORT      = "5432",
    INSTALLED_APPS     = ("myApp")
)

from django.db import models
from myApp.models import *

并将其添加到您的 settings.py 文件中:

    DATABASE_ENGINE    = "postgresql_psycopg2"
    DATABASE_NAME      = "myDatabase"
    DATABASE_USER      = "myUsername"
    DATABASE_PASSWORD  = "myPassword"
    DATABASE_HOST      = "localhost"
    DATABASE_PORT      = "5432",
    INSTALLED_APPS     = ("myApp")

最后是您的 myApp/models.py:

# myApp/models.py
from django.db import models

class MyModel(models.Model):
     field = models.CharField(max_length=255)

就是这样。现在让 Django 管理您的数据库,在命令提示符下导航到我们的 /standalone 目录并运行:

manage.py sql MyApp

【讨论】:

请用新的或不同的信息更新***.com/questions/302651/…。请在该版本的问题中添加您的答案。 在我的情况下,为了让它工作(python2.7),我需要将("myApp")更改为("myApp",),我还需要将***目录附加到sys.path。此外,settings.py 可以为空(为我工作) - 无需复制连接信息。 如果您在settings.configure() 调用myScripy.py 中提供所有相同的值,那么settings.py 的意义何在?

以上是关于将 Django ORM 用作独立的 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 的 ORM Extra() 包含重复表

Django ORM:未继承子级的字段和值。对象重复。 (使用Django管理界面)

将 django 用作独立模板引擎时如何使用自定义过滤器

将 MySql 查询转换为 Django ORM 查询

使用原始 SQL 查询生成表,并希望在 Django 中将这些表用作 ORM

Django QuerySet 包含重复的条目